2013-02-16 19 views
12

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

MySQLで、私は

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

と$結果が真だろう行うことができます。

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

と$結果が偽である:

は今、しかし、mysqliのコードでは、私はこの(エラー処理を明確にするため取り除か)のようなものを持っています。

レコードの場合、クエリは有効です(私はstackoverflowにそれを転記させた可能性のあるすべてのタイプミスを無視します)。フィールド1はデータベースで正しく更新されます。また、get_result()はselectクエリでうまく動作するため、get_result()を使用できないという問題はありません。

基本的には、この変更された動作が期待されているかどうか、あるいはどこかのバグを見つけようとしているかどうかを知りたいだけです。

+0

いいえ...コメントが表示されなくなったようですが、実際にはget_resultが "結果セットを返すか、失敗した場合はFALSEを返します"というドキュメントをチェックするように指示しています。 私はすでに質問をする前にそれを読んでいましたが、ドキュメントが正確であるかどうか不思議です。 $ stmt-> get_result()がfalseを返した後、$ stmt-> errno(0)と$ stmt-> error(空白)をチェックし、クエリが正常に実行されたように見えました。では、このエラーはどこで発生していますか? – Swiftheart

答えて

11

準備文が成功した場合にTRUEを、失敗した場合にFALSE

$stmt->execute(); 

そしてexecute()リターンで実行されます。

UPDATEDELETEINSERTは結果セットを生成しないため、get_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 
} 
+0

はい...そこにサンプルコードで$ stmt-> execute()という行があり、実際のコードでは戻り値をチェックしています。それは真実を返すので、それは問題ありません。私は$ stmt-> get_result()_がtrueを返すべきかどうか不思議です。 – Swiftheart

+0

更新された回答を参照してください。 'UPDATE'、' DELETE'、 'INSERT'クエリは、結果セットを生成しないので、' get_result() 'を使う必要はありません。 – peterm

+0

よかった、ありがとう。私はそれほど疑われましたが、私はいくつかの外部の確認をしたかったのです。 – Swiftheart

3

次のようになります。非SELECTクエリは、「結果セット」を持っていないのでget_resultは彼らのために無意味です。変更クエリ(UPDATEINSERT、またはDELETE)を知りたい場合は、$stmt->affected_rowsを使用してください。クエリが何かを実行したかどうかによって、0または非ゼロになります。

関連する問題