2017-03-14 9 views
0

この投稿が承認される前に、この問題に関する既存のリファレンスを参照してください。 &他のスレッド私はこれを検討しました。私はシンプルなものを見逃していることを知っているが、私の人生のために私の前に何があるか見ることができない。私は本当に私の知恵の終わりです今すぐPHP内でstoredprocを使用しているときに「コマンドが同期していないため、このコマンドを実行できません」

私は一度に2つのリンクを投稿することが許可されているので、私は強調した最初の2つを選択したので、私はこれを見てきました!

http://www.artfulsoftware.com/infotree/tip.php?id=799&r=1 Commands out of sync; you can't run this command now

1日に第1回のクエリが第二セットの第二のクエリ前

object(mysqli)#1 (18) { 
    ["affected_rows"]=> 
    int(10) 
    ["client_info"]=> 
    string(6) "5.5.52" 
    ["client_version"]=> 
    int(50552) 
    ["connect_errno"]=> 
    int(0) 
    ["connect_error"]=> 
    NULL 
    ["errno"]=> 
    int(0) 
    ["error"]=> 
    string(0) "" 
    ["field_count"]=> 
    int(2) 
    ["host_info"]=> 
    string(25) "Localhost via UNIX socket" 
    ["info"]=> 
    NULL 
    ["insert_id"]=> 
    int(0) 
    ["server_info"]=> 
    string(23) "5.5.43-0ubuntu0.12.04.1" 
    ["server_version"]=> 
    int(50543) 
    ["stat"]=> 
    string(52) "Commands out of sync; you can't run this command now" 
    ["sqlstate"]=> 
    string(5) "HY000" 
    ["protocol_version"]=> 
    int(10) 
    ["thread_id"]=> 
    int(1143586) 
    ["warning_count"]=> 
    int(0) 
} 

を設定した後、第一の第一クエリは

object(mysqli)#1 (18) { 
    ["affected_rows"]=> 
    int(-1) 
    ["client_info"]=> 
    string(6) "5.5.52" 
    ["client_version"]=> 
    int(50552) 
    ["connect_errno"]=> 
    int(0) 
    ["connect_error"]=> 
    NULL 
    ["errno"]=> 
    int(0) 
    ["error"]=> 
    string(0) "" 
    ["field_count"]=> 
    int(2) 
    ["host_info"]=> 
    string(25) "Localhost via UNIX socket" 
    ["info"]=> 
    NULL 
    ["insert_id"]=> 
    int(0) 
    ["server_info"]=> 
    string(23) "5.5.43-0ubuntu0.12.04.1" 
    ["server_version"]=> 
    int(50543) 
    ["stat"]=> 
    string(147) "Uptime: 4702713 Threads: 3 Questions: 19875140 Slow queries: 504 Opens: 30587 Flush tables: 1 Open tables: 128 Queries per second avg: 4.226" 
    ["sqlstate"]=> 
    string(5) "00000" 
    ["protocol_version"]=> 
    int(10) 
    ["thread_id"]=> 
    int(1143580) 
    ["warning_count"]=> 
    int(0) 
} 

を設定する前に

object(mysqli)#1 (18) { 
    ["affected_rows"]=> 
    int(0) 
    ["client_info"]=> 
    string(6) "5.5.52" 
    ["client_version"]=> 
    int(50552) 
    ["connect_errno"]=> 
    int(0) 
    ["connect_error"]=> 
    NULL 
    ["errno"]=> 
    int(2014) 
    ["error"]=> 
    string(52) "Commands out of sync; you can't run this command now" 
    ["field_count"]=> 
    int(2) 
    ["host_info"]=> 
    string(25) "Localhost via UNIX socket" 
    ["info"]=> 
    NULL 
    ["insert_id"]=> 
    int(0) 
    ["server_info"]=> 
    string(23) "5.5.43-0ubuntu0.12.04.1" 
    ["server_version"]=> 
    int(50543) 
    ["stat"]=> 
    string(52) "Commands out of sync; you can't run this command now" 
    ["sqlstate"]=> 
    string(5) "HY000" 
    ["protocol_version"]=> 
    int(10) 
    ["thread_id"]=> 
    int(1143613) 
    ["warning_count"]=> 
    int(0) 
} 

2日に第2回のクエリは例

object(mysqli)#1 (18) { 
    ["affected_rows"]=> 
    int(0) 
    ["client_info"]=> 
    string(6) "5.5.52" 
    ["client_version"]=> 
    int(50552) 
    ["connect_errno"]=> 
    int(0) 
    ["connect_error"]=> 
    NULL 
    ["errno"]=> 
    int(2014) 
    ["error"]=> 
    string(52) "Commands out of sync; you can't run this command now" 
    ["field_count"]=> 
    int(2) 
    ["host_info"]=> 
    string(25) "Localhost via UNIX socket" 
    ["info"]=> 
    NULL 
    ["insert_id"]=> 
    int(0) 
    ["server_info"]=> 
    string(23) "5.5.43-0ubuntu0.12.04.1" 
    ["server_version"]=> 
    int(50543) 
    ["stat"]=> 
    string(52) "Commands out of sync; you can't run this command now" 
    ["sqlstate"]=> 
    string(5) "HY000" 
    ["protocol_version"]=> 
    int(10) 
    ["thread_id"]=> 
    int(1143626) 
    ["warning_count"]=> 
    int(0) 
} 

を設定した後、私のクエリからの出力は、そこに一般的に8工あたりですが、それは最高の

それを短縮するために考えていることの結果セット
Array 
(
    [1st Set] => Array 
     (
      [Eng1] => Array 
       (
        [Live] => 24 
        [Score] => 47 
        [Res] => 102 
       ) 
      [Eng2] => Array 
       (
        [Live] => 22 
        [Score] => 39 
        [Res] => 79 
       ) 
      [Eng3] => Array 
       (
        [Live] => 24 
        [Score] => 33 
        [Res] => 54 
       ) 
      [Eng4] => Array 
       (
        [Live] => 11 
        [Score] => 31 
        [Res] => 46 
       ) 
      [Eng5] => Array 
       (
        [Live] => 10 
        [Score] => 25 
        [Res] => 51 
       ) 
     ) 
    [2nd Set] => 
) 

storedproc -

問題の10
CREATE DEFINER=`chris_test`@`%` PROCEDURE `countSingleStat`(
    IN statTableLoc VARCHAR(20), 
    IN statCountLoc VARCHAR(20), 
    IN statIDLoc VARCHAR(20), 
    IN teamID INT(2), 
    IN singleTeam INT(1), 
    IN rangeStart DATE, 
    IN rangeEnd DATE, 
    IN dateRequired INT(1), 
    IN dataHandling INT(1)) 
countStat:BEGIN 

    -- Set passed attributes as uservar so these can be used with concat 
    SET @statTableLoc = statTableLoc; 
    SET @statCountLoc = statCountLoc; 
    SET @statIDLoc = statIDLoc; 
    SET @rangeStart = rangeStart; 
    SET @rangeEnd = rangeEnd; 
    SET @teamID = teamID; -- Excluding or requesting a specific team 

    -- Example completed query 
    -- SELECT e.displayname, SUM(r.sessions) AS totalres FROM rescue r JOIN engineers e ON e.id=r.engid 
    -- WHERE r.date BETWEEN '2017-01-06' AND '2017-01-07' 
    -- AND NOT e.id=0 
    -- GROUP BY e.id 
    -- ORDER BY totalres DES 

    -- start of query required to find single stat 
    -- datahandling specifies how the data is being present, currently only string & sum listed 
    CASE dataHandling 
     WHEN 0 THEN 
      SET @qry = concat('SELECT e.displayname, ', @statTableLoc ,'.', @statCountLoc ,' AS string'); 
     WHEN 1 THEN 
      SET @qry = concat('SELECT e.displayname, sum(', @statTableLoc ,'.', @statCountLoc ,') AS total'); 
    END CASE; 

    -- Is a date start/end required for query. 
    CASE dateRequired 
     WHEN 0 THEN 
      SET @qry = concat(@qry,' FROM ', @statTableLoc ,' JOIN engineers e ON e.id=', @statTableLoc ,'.engid WHERE'); 
     WHEN 1 THEN 
      SET @qry = concat(@qry,' FROM ', @statTableLoc ,' JOIN engineers e ON e.id=', @statTableLoc ,'.engid WHERE ', @statTableLoc ,'.date BETWEEN \'', @rangeStart ,'\' AND \'', @rangeEnd ,'\' AND'); 
    END CASE; 

    -- Has a single team been requested or a team been excluded from results 
    CASE singleTeam 
     WHEN 0 THEN 
      SET @qry = concat(@qry,' NOT e.teamid=', @teamID ,' GROUP BY e.id ORDER BY'); 
     WHEN 1 THEN 
      SET @qry = concat(@qry,' e.teamid=', @teamID ,' GROUP BY e.id ORDER BY'); 
    END CASE; 

    CASE dataHandling 
     WHEN 0 THEN 
      SET @qry = concat(@qry,' string DESC'); 
     WHEN 1 THEN 
      SET @qry = concat(@qry,' total DESC'); 
    END CASE; 

    PREPARE statsCount FROM @qry; 
    EXECUTE statsCount; 
    DROP PREPARE statsCount; 
END 

PHP(5) -

// Set query for specifed stat & it's assoicated settings. Request between specific dates if required 

$qry = "CALL SingleStat('". $statsTable ."','". $statsRequired ."','". $statTableEngID ."',". $teamID .",". $excludeORinclude .",'". $dateRangeStart ."','". $dateRangeEnd ."',". $dateRequired .",". $dataHandling .")"; 

try 
{ // run query 
    $result = $db->query($qry); 
    echo $db->error; 
} 
catch (Exception $e) 
{ 
    echo $db->error; 
    vardumpCount($e);  
} 

// do we have results? 
if($result->num_rows > 0) 
{ 

    // loop through results 
    while ($resultsArray = $result->fetch_assoc()) 
    { 
     /* LOTS OF CODE GOES HERE */ 
    } 
    ##### 
    // do we have any results remaining to be processed. 
    if ($db->next_result()) 
    { 
     if ($results = $db->use_result()) 
     { 
      while ($row = $result->fetch_assoc()) 
      { 
       echo "<pre>"; 
       print_r($row); 
       echo "</pre>"; 
       echo "</br>-----------</br></br>"; 
      } 
     } 
    } 
    ##### 

    return $engStatArray; 
} 
+0

を含めることは、関連するコードどちらを提供しなかったりしてもエラーがそれほど発生行をマークしていなかった&として偽を評価されるまで、それは試みるあります私たちができることはほとんどありません –

+0

私は正確に何が欠けていますか?私は私のmysqliオブジェクトの私のvardumps内で見える私のタイトル内のエラーを述べた。私は、問題のstoredprocと関連するPHPコードを、どのように各クエリを処理しているのかを提供しました。私はmysqliに関する基本に私のPHPを取り除き、私が必要と思ったものだけを提供しようとしました。 – Raffers

+0

phpは大部分の関数で、出力の処理と配列への追加だけです。関数の外側では、foreachループ内にあり、関数/ storedprocに設定を渡します。エラーは1番目のループで発生しますが、エラーが完全に終了した2番目のループの2番目のクエリセットに丸められるまで '[" stat "]'で表示されます。 – Raffers

答えて

0

は、だから私はいくつかのテストコード内の異なるものを試しステップ&することにより、このステップを経て、私の問題を解決するために管理してきました。私はまだそれが同じ方法を経ているので、それがなぜこのように動作するのか全く理解していません。&他のものではありません。私が見ることができる唯一の違いは、それが何らかの理由で$db->more_results()

// Set query for specifed stat & it's assoicated settings. Request between specific dates if required 

$qry = "CALL SingleStat('". $statsTable ."','". $statsRequired ."','". $statTableEngID ."',". $teamID .",". $excludeORinclude .",'". $dateRangeStart ."','". $dateRangeEnd ."',". $dateRequired .",". $dataHandling .")"; 

try 
{ // run query 
    $result = $db->query($qry); 
    echo $db->error; 
} 
catch (Exception $e) 
{ 
    echo $db->error; 
    vardumpCount($e);  
} 

// do we have results? 
if($result->num_rows > 0) 
{ 
    while($db->more_results() && $db->next_result()) 
    { 
     // loop through results 
     while ($resultsArray = $result->fetch_assoc()) 
     { 
      /* LOTS OF CODE GOES HERE */ 
     } 
    } 
    return $engStatArray; 
} 
関連する問題