我有一个更新我的数据库记录的查询,它工作正常,但我想知道如何检查更新是否已经发生,所以我可以返回true并显示正确的消息?
现在我知道我可以做SELECT查询:
if(stmt->fetch())
如果这是真的,我会回复真实并说"记录发现"但我还没有知道如何更新查询?
任何人都知道怎么做?
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
$stmt->execute();
//Check if update worked
}
感谢您的帮助。
答案 0 :(得分:6)
Execute
方法成功结束后返回True,但是,如果此行为不够,您还可以检查affected rows:
$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.
}
}
答案 1 :(得分:5)
检查以下是否有效
$query = "UPDATE user
SET password = ?
WHERE email = ?";
if($stmt = $conn->prepare($query))
{
$stmt->bind_param('ss', $pwd, $userEmail);
if ($stmt->execute())
{
// worked
}
else
{
// not worked
}
祝你好运!!!
答案 2 :(得分:1)
来自the manual for mysqli_stmt_execute()
Returns TRUE on success or FALSE on failure.
答案 3 :(得分:0)
mysql_affected_rows()功能会对你有用吗?
答案 4 :(得分:0)
答案 5 :(得分:0)
迟了几年,但也许这可以帮助别人......
正如其他人已经提到的那样,您可以使用affected_rows来检查PREPARED STATEMENT中的UPDATE查询是否确实更新了任何记录。但是,请注意,如果提交的数据与数据库中的记录相同,则'affected_rows'将返回零(0)。
我的解决方法是使用ON UPDATE CURRENT_TIMESTAMP为TIMESTAMP创建一个列。然后,每次运行查询时,我还会将NULL值传递给跟踪时间的列 - 这样每次执行查询时都会强制该行进行UPDATE。然后你要做的就是检查affected_rows。