2012-12-22 57 views
2

我有一个PHP脚本的问题。执行方法总是设置为true

我想从我的数据库中删除一条记录,所以我使用​​方法,并且当我没有将代码作为参数传递的代码记录时它应该返回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); 

?> 
+0

谁告诉你,如果没有行被删除,它应该返回false? http://php.net/manual/en/mysqli-stmt.execute.php另外这个值得检查:http://php.net/manual/en/mysqli-stmt.affected-rows.php – zerkms

回答

2

一个PHP PDO对象将(正确地)为删除零行返回一个成功/真值。解决这个问题的方法之一是使用类似$pdo->rowCount()的东西来查看PDO影响了多少行。如果您尝试删除行,则应将$pdo->rowCount()中的结果0视为您没有成功删除想要的行。

0

你可能会感到困惑。执行文档说:

Returns TRUE on success or FALSE on failure. 

它并没有说任何关于行是否被删除或没有。如果您想要删除行数,您可能需要affected rows。然而,即使如此,依靠它也可能是一个坏主意。例如,如果两个呼叫删除同一行发生在同一时间?

你不应该在意删除已经删除了一行,只是你试图删除的行不再存在。

相关问题