次のコードを使用すると、dbに何かが挿入されたことをどのように知ることができますか?
if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);
$stmt->execute();
$stmt->close();
}
次の行を追加するとうまくいくと思っていましたが、明らかにそうではありませんでした。
if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}
次に、$ updatedAdded = "N"を使用して、上記の挿入が成功することに依存しているページのさらに下のコードをスキップします。
何か案は?
execute()
メソッドはboolean
...を返すので、次のようにします。
if ($stmt->execute()) {
// it worked
} else {
// it didn't
}
$ stmt-> execute()の戻り値を確認してください
if(!$stmt->execute()) echo $stmt->error;
コード行はexecute()コマンドを実行するため、現在の$ stmt-> execute()の代わりに使用することに注意してください。
使用している機能の マニュアルページ を確認するだけです。
prepare()-ステートメントオブジェクトを返すか、エラーが発生した場合は
FALSE
を返します。
bind_param()-成功するとTRUE
を、失敗するとFALSE
を返します。
execute()-成功するとTRUE
を返し、失敗するとFALSE
を返します。
close()-成功するとTRUE
を返し、失敗するとFALSE
を返します。
しかし実際には、これは煩わしくなり、エラーが発生しやすくなります。 エラー時に例外をスローするようにmysqliを設定する を使用して、エラーが予想されるいくつかの場合を除いて、特定のエラー処理をすべて削除することをお勧めします(たとえば、一意の制約に違反する可能性のある一時的な挿入):
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
影響を受ける行の数を知りたい場合は、 pdoステートメントのrowCount を使用できます。
$stmt->rowCount();
実行後;
エラー処理について話している場合、最良のオプションは、エラーモードを設定して例外をスローし、すべてをtry/catchブロックにラップすることです
try
{
//----
}
catch(PDOException $e)
{
echo $e->getMessage();
}
実行後に戻り値を確認できます:
if ($stmt->execute()) {
// ok :-)
$count = $stmt->rowCount();
echo count . ' rows updated properly!';
} else {
// KO :-(
print_r($stmt->errorInfo());
}
他の方法:
if ($stmt->error){
echo "Error";
}
else{
echo "Ok";
}