24

if (isset($connect->lastInsertId()))INSERTステートメントの場合、INSERTステートメントが成功したかどうかを確認するために使用できるようです。(間違っている場合は訂正してください。)

しかし、UPDATEステートメントの場合、それが成功したかどうかをどのように知ることができますか?

たとえば、私はそのような基本的なものを持っています:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?");
$statement->execute(array($id));

よろしくお願いします。よろしく

4

2 に答える 2

34

それはあなたが「成功した」とはどういう意味かによります。クエリが失敗せずに実行されたことを意味する場合、設定したエラーモードに応じて、PDO失敗時に例外をスローするか、FALSEから戻るので、その場合の「成功した」クエリは、executeメソッドが実行したクエリになります。例外PDOStatement::execute()を返しFALSEたりスローしたりしないでください。

実際に行が更新された(更新された行が0行であるのに対して)という意味で「成功」を意味する場合は、を使用してそれを確認する必要がありPDOStatement::rowCount()ます。これにより、前のクエリで影響を受けた行の数がわかります。

警告:newvalue = oldvalue PDOStatement::rowCount()ゼロを返す更新の場合。使用できます

$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

この予期しない動作を無効にするため。

于 2012-08-05T23:19:43.580 に答える
13
$stmt->execute();
$count = $stmt->rowCount();

if($count =='0'){
    echo "Failed !";
}
else{
    echo "Success !";
}
于 2017-02-21T17:15:01.623 に答える