我有一个更新数据库中记录的查询,它运行良好,但我想知道如何检查是否发生了更新,以便返回true并显示正确的消息?
现在我知道用SELECT查询我可以做:
if(stmt->fetch())
如果这是真的,我会返回true并说"找到记录",但我不知道如何对更新查询执行此操作?
有人知道怎么做吗?
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
$stmt->execute();
//Check if update worked
}
谢谢你的帮助。
Execute
方法在成功完成时返回True,但是,如果这种行为对您来说还不够,您还可以检查受影响的行:
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute()) {
//query with out errors:
printf("rows updateds: %d'n", $stmt->affected_rows);
} else {
//some error:
printf("Error: %s.'n", $stmt->error);
}
}
您可以做的第二项检查是验证是否有1行被更新:
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute() and $stmt->affected_rows == 1) {
//your update is succesfully.
}
}
检查以下是否有效:
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query)) {
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute()) {
// Worked...
} else {
// Didn't work...
}
}
晚了几年,但这可能会对某人有所帮助。。
正如其他人已经提到的,您可以使用affected_rows来检查PREPARED语句中的UPDATE查询是否确实更新了任何记录。但是,请注意,如果提交的数据与数据库"affected_rows"中的记录相同,则将返回零(0)。
我的一个变通方法是用ONUPDATE CURRENT_TIMESTAMP为TIMESTAMP创建一个列。然后,每次运行查询时,我还将向跟踪时间的列传递一个NULL值——这样,每次执行查询时都会强制行执行UPDATE。然后,您所要做的就是检查受影响的行。
mysql_affected_rows()函数适用于您吗?