レコードを挿入するためにPDOを使用しています(mysqlおよびphp)
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
レコードが正常に挿入されたかどうか、たとえば、レコードが重複したために挿入されなかったかどうかを知る方法はありますか?
編集:もちろんデータベースを見ることができますが、プログラムによるフィードバックを意味します。
PDOStatement->execute()
は、成功時にtrueを返します。 PDOStatement->errorCode()
もあり、エラーをチェックできます。
PDOの最も推奨されるエラーモードは_ERRMODE_EXCEPTION
_であるため、直接execute()
結果検証は機能しません。コードの実行は、他の回答で提供される条件にさえ到達しないためです。
そのため、PDOでクエリの実行結果を処理する3つの可能なシナリオがあります。
try..catch
_演算子を使用します。通常のPHPユーザーの場合、少し異質に聞こえます-操作の直接の結果を確認するのではなく、それはどうですか?-これはまさに例外がどのように動作するのですか-エラーをどこかで確認します。非常に便利です。
簡単に言えば、通常のコードではエラー処理はまったく必要ありません。コードをそのままにしてください:
_$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
_
成功すると、そのように通知され、エラーが発生すると、そのような場合にアプリケーションが表示している通常のエラーページが表示されます。
エラーを報告する以外の処理シナリオがある場合にのみ、挿入ステートメントを_try..catch
_演算子に入れて、予期したエラーと処理。または-エラーが異なる場合-re-throw例外。サイト全体のエラーハンドラで通常の方法で処理できるようにします。以下は、私の PDOでのエラー処理に関する記事 のコード例です:
_try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
_
上記のコードでは、特定のエラーをチェックして何らかのアクションを実行し、プログラマーに報告される他のエラー(このようなテーブルはありません)の例外を再スローします。
繰り返しになりますが、単に「挿入が成功しました」などのことをユーザーに伝えるためだけです条件は必要ありません。
execute
の戻り値を見てみてください。成功した場合はTRUE
、失敗した場合はFALSE
です。
更新クエリが現在のデータベースレコードと一致する値で実行された場合、$stmt->rowCount()
は、影響を受けた行がない場合は_0
_を返します。成功をテストするif( rowCount() == 1 )
がある場合、更新は失敗しなかったが、値はすでにデータベースにあったので何も変わらないので失敗したと思うでしょう。
_$stmt->execute();
if( $stmt ) return "success";
_
違反した一意のキーフィールドでレコードを更新しようとしたときに、これは機能しませんでした。クエリは成功を返しましたが、別のクエリは古いフィールド値を返します。
行数をテストできます
$sqlStatement->execute( ...);
if ($sqlStatement->rowCount() > 0)
{
return true;
}
自動インクリメントで主キーとしてidを使用します
$stmt->execute();
$insertid = $conn->lastInsertId();
増分IDは最初のレコードでも常にゼロよりも大きいため、ゼロよりも大きいID cozの値は常にPHPで真を返します
if ($insertid)
echo "record inserted successfully";
else
echo "record insertion failed";
PDOStatement-> execute()は例外をスローできます
だからあなたにできることは
try
{
PDOStatement->execute();
//record inserted
}
catch(Exception $e)
{
//Some error occured. (i.e. violation of constraints)
}