web-dev-qa-db-ja.com

$ stmt-> execute():データベースの挿入が成功したかどうかを知る方法は?

次のコードを使用すると、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"を使用して、上記の挿入が成功することに依存しているページのさらに下のコードをスキップします。

何か案は?

37
cosmicsafari

execute() メソッドはboolean ...を返すので、次のようにします。

if ($stmt->execute()) { 
   // it worked
} else {
   // it didn't
}
72
ManseUK

$ stmt-> execute()の戻り値を確認してください

if(!$stmt->execute()) echo $stmt->error;

コード行はexecute()コマンドを実行するため、現在の$ stmt-> execute()の代わりに使用することに注意してください。

23
MattP

使用している機能の マニュアルページ を確認するだけです。

prepare()-ステートメントオブジェクトを返すか、エラーが発生した場合はFALSEを返します
bind_param()-成功するとTRUEを、失敗するとFALSEを返します
execute()-成功するとTRUEを返し、失敗するとFALSEを返します
close()-成功するとTRUEを返し、失敗するとFALSEを返します

しかし実際には、これは煩わしくなり、エラーが発生しやすくなります。 エラー時に例外をスローするようにmysqliを設定する を使用して、エラーが予想されるいくつかの場合を除いて、特定のエラー処理をすべて削除することをお勧めします(たとえば、一意の制約に違反する可能性のある一時的な挿入):

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
6

影響を受ける行の数を知りたい場合は、 pdoステートメントのrowCount を使用できます。

$stmt->rowCount();

実行後;

エラー処理について話している場合、最良のオプションは、エラーモードを設定して例外をスローし、すべてをtry/catchブロックにラップすることです

try
{
    //----
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
5
mishu

実行後に戻り値を確認できます:

if ($stmt->execute()) { 
    // ok :-)
    $count = $stmt->rowCount();
    echo count . ' rows updated properly!';
} else {
    // KO :-(
    print_r($stmt->errorInfo());
}
3
CBEK

他の方法:

if ($stmt->error){
        echo "Error";
    }
    else{
        echo "Ok";
    }
0
Pedro Antônio