2

PHPスクリプトに問題があります。

データベースからレコードを削除したいので、execute()メソッドを使用しました。引数として渡したコードを含むレコードがない場合はfalseを返す必要がありますが、そのコードを含むレコードがない場合でも常にtrueを返します。

これはスクリプトです:

<?php

include('connexion.php');

//Récuperation des valeurs 
$code = $_POST['code'];

if($code)
{
    //Suppression de l'enregistrment avec le code = $code à m'aide d'une requête préparée
    $req = $bdd->prepare('Delete from chambre where code_ch = ?');
    $rowDeleted = $req->execute(array($code));
    //Ou bien : mysql_query('Delete from chambre where code_ch = '.$code);

    $supprimer = ($rowDeleted == true) ? 'OK' : 'notfound';

}
else
{
    $supprimer = 'empty';
}

header('Location: supprimer.php?supprimer='.$supprimer.'&code='.$code);

?>
4

2 に答える 2

2

PHP PDO オブジェクトは、(正しく) ゼロ行の削除に対して成功/真の値を返します。これを回避する 1 つの方法は$pdo->rowCount()、PDO が影響した行数を確認するなどの方法を使用することです。行を削除しようとしている場合、結果が 0 の$pdo->rowCount()場合は、目的の行を正常に削除できなかったことを意味すると考える必要があります。

于 2012-12-22T11:51:11.320 に答える
0

あなたはおそらく混乱しています。実行のドキュメントには次のように書かれています:

Returns TRUE on success or FALSE on failure.

行が削除されたかどうかについては何も言いません。行数を削除したい場合は、おそらく影響を受ける行が必要です。ただし、それでも、それに依存するのはおそらく悪い考えです。たとえば、同じ行を削除する 2 つの呼び出しが同時に発生した場合はどうなるでしょうか。

delete が実際に行を削除したことを気にする必要はありません。削除しようとしていた行がもう存在しないことだけを考えてください。

于 2012-12-22T12:02:37.863 に答える