14

PHPコードをmysqlからmysqliに更新していますが、この質問に対する答えが見つからないようです。mysqli更新クエリは結果を返しますか?

mysqlを使用すると、

$result = mysql_query("UPDATE `data` SET `field1` = 1 WHERE `key` = '$mykey');

クエリが行を返さない場合でも、$resultはtrueになります。

しかし、mysqliコードには、次のようなものがあります(わかりやすくするためにエラー処理は削除されています)。

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
$result = $stmt->get_result();

$resultはfalseです。

レコードの場合、クエリは有効であり(stackoverflowに転記した可能性のあるタイプミスは無視してください)、field1はデータベースで期待どおりに正しく更新されます。また、get_result()は一部のクエリで正常に機能するため、get_result()が使用できないことは問題ではありません。

基本的に、この変更された動作が予想されるのか、それともどこかでバグを見つけようとする必要があるのか​​を知りたいだけです。

4

2 に答える 2

14

プリペアドステートメントはで実行されます

 $stmt->execute();

そしてexecute()、成功した場合はTRUEを返し、失敗した場合はFALSEを返します。

、、は結果セットを生成しないためUPDATEDELETEを使用する必要はありません。影響を受ける行の総数を知る必要がある場合は、関数を使用してそれを行うことができます。INSERTget_result()mysqli_stmt_affected_rows()

したがって、コードは次のようになります。

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
//You can get the number of rows affected by your query
$nrows = $stmt->affected_rows;
if (!$nrows) {
    //Nothing has been updated
}
于 2013-02-16T07:39:01.670 に答える
5

非SELECTクエリには「結果セット」get_resultがないため、意味がありません。UPDATE変更クエリ( 、、、INSERTまたはDELETE)かどうかを知りたい場合は、を使用します$stmt->affected_rows。これは、クエリが何かを実行したかどうかに応じて、0またはゼロ以外になります。

于 2013-02-16T07:46:49.853 に答える