execute方法始终设置为true

时间:2012-12-22 11:43:14

标签: php pdo execute

我的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);

?>

2 个答案:

答案 0 :(得分:2)

PHP PDO对象将(正确地)返回成功/ true值以便在ZERO行上删除。解决此问题的一种方法是使用$pdo->rowCount()之类的内容来查看PDO影响的行数。如果您尝试删除行,则应考虑$pdo->rowCount()的结果为0表示您未成功删除所需的行。

答案 1 :(得分:0)

你可能很困惑。执行文档说:

Returns TRUE on success or FALSE on failure.

没有说明是否删除了某行。如果要删除行数,可能需要affected rows。然而,即便如此,依赖于此也是一个坏主意。例如,如果同时发生两次删除同一行的调用呢?

您不应该关心删除实际上已删除了一行,只是您尝试删除的行不再存在。