0

現在、このPHPコードがあります。

if (isset($User)){
            if (is_object($User)) {
                if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
                    printf("Database error");
                    exit; 
                }

                if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
                    var_dump($result_block);
                    printf("Database error");
                    exit;
                }
            }
        }

何をしても、$result ブロックの var ダンプは常に bool(false) です。そして、それに fetch_array を使用する必要がある場合、$result_block が非オブジェクトであることがわかります。ただし、最初のクエリをプロシージャ コールから通常の選択に変更すると問題が解決するようで、コードから完全に削除されます。

両方の呼び出しに対して SQL クエリをエコーし​​ました。SQL に直接プラグインすると、どちらも何かを返します。

私がしていないことはありますか?

編集1:まだ運がありません。ただし、次のようにコードを反転すると:

if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
                    printf("Database error");
                    exit;
                }

                if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
                    printf("Database error");
                    exit; 
                }

                var_dump($result_block);
                echo "<br />";
                var_dump($result_paycon);

var ダンプから次の情報を取得します。

object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(10) ["lengths"]=> NULL ["num_rows"]=> int(2) ["type"]=> int(0) }
object(mysqli_result)#5 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } 

しかし、前のコードでは、そのうちの 1 つが失敗するだけで、その理由はまだわかりません。

編集 2: 前のコードで、mysqli オブジェクトのエラー プロパティの値を出力しました。私は以下を取得します:

コマンドが同期していません。現在、このコマンドを実行することはできません

4

1 に答える 1

0

問題を理解しました。$mysqli オブジェクトを別のクエリ/結果セット用に準備するには、next_result() メソッドを実行する必要があります。mysql ドキュメントのコメントで以前に暗示されているように、free_result は機能するはずです。でも、なぜか私には合いません。

したがって、これは機能します:

if (isset($User)){
            if (is_object($User)) {
                if (!$result_paycon = $mysqli->query("CALL CHECK_CONVENTION(" . $User->id . "," . $row_convention["IDCONVENTION"] . ")")){
                    printf("Database error");
                    exit; 
                }
                $result_paycon->close();
                $mysqli->next_result();

                if (!$result_block = $mysqli->query("SELECT * FROM VIEW_ROOMBLOCK WHERE IDCONVENTION = " . $row_convention["IDCONVENTION"])){
                    var_dump($result_block);
                    printf("Database error");
                    exit;
                }
            }
        }
于 2013-04-18T00:11:29.713 に答える