2012-10-20 174 views
7

这里是我的情况:如何检查UPDATE mysqli查询是否正确执行?

$sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?'; 
if($stmt->prepare($sql)) { 
    $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass); 
    $stmt->execute(); 
} 

现在,我怎么能看到,如果执行成功更新查询?更确切地说,我怎样才能看到旧密码和用户名是否正确,以便我可以存储新密码? 我做这个尝试:

$res = $stmt->execute(); 
echo 'Result: '.$res; 

但我总是得到:

Result: 1 

即使旧密码不正确。

回答

13

不更新任何行的查询不是错误条件。这只是一个成功的查询,并没有改变任何东西。要查看更新是否确实改变了任何内容,您必须使用mysqli_affected_rows()

+0

太好了,谢谢! – Dim13i

+0

另一个不错的选择是[$ mysqli-> info](http://php.net/manual/en/mysqli.info.php),我使用它来反馈“UPDATE”查询。 –

2

尝试使用mysqli_affected_rows()以获取受影响的行数。

2

您需要使用您正在使用的MySQL扩展的affected_rows函数。如果查询因为没有行匹配而失败,则返回0;如果发生错误,则返回-1;或者显示已更改的行数的正数。

0
mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50"); 
printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link)); 

试试看。

+0

提供解释如何工作的解释可能是一个好主意,因为将来阅读此答案的用户可能无法理解它,或者有理解它的上下文。 – orangething

+0

好吧你是对的,但在这种情况下,我的答案基于第一个问题 –