sql >> データベース >  >> RDS >> Mysql

mysqliプリペアドステートメントnum_rowsは0を返しますが、クエリは0より大きい値を返します

    mysqliを介してステートメントを実行すると、結果はフェッチするまで実際にはPHPにありません。結果はDBエンジンによって保持されます。したがって、mysqli_stmt オブジェクトには、実行直後の結果の数を知る方法がありません。

    次のようにコードを変更します:

    $stmt->execute();
    $stmt->store_result(); // pull results into PHP memory
    
    // now you can check $stmt->num_rows;
    

    マニュアルを参照

    これは特定の例には当てはまりませんが、結果セットが大きい場合は、$stmt->store_result() 大量のメモリを消費します。この場合、少なくとも1つの結果が返されたかどうかを判断するだけであれば、結果を保存しないでください。代わりに、結果のメタデータがnullでないかどうかを確認してください:

    $stmt->execute();
    $hasResult = $stmt->result_metadata ? true : false;
    

    マニュアルを参照



    1. 単語境界のようなエスケープシーケンスでREGEXPを使用するにはどうすればよいですか?

    2. DBIが暗黙的に整数を文字列に変更するのはなぜですか?

    3. MySQLの'secure-file-priv'は、割り当てられた安全なフォルダからでも、ファイル内のデータのロードを許可しません

    4. mysql用の複数のDockerコンテナ、または複数のデータベースを持つ1つのインスタンス