Php 使用准备好的语句更新记录,检查更新是否有效
我有一个更新数据库记录的查询,它工作正常,但我想知道如何检查更新是否发生,以便返回true并显示正确的消息 现在我知道,通过选择查询,我可以:Php 使用准备好的语句更新记录,检查更新是否有效,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我有一个更新数据库记录的查询,它工作正常,但我想知道如何检查更新是否发生,以便返回true并显示正确的消息 现在我知道,通过选择查询,我可以: if(stmt->fetch()) 如果这是真的,我会返回true并说“records found”,但我不知道如何进行更新查询 有人知道怎么做吗 $query = "UPDATE user SET password = ? WHERE email = ?"; if($stmt = $conn-&
if(stmt->fetch())
如果这是真的,我会返回true并说“records found”,但我不知道如何进行更新查询
有人知道怎么做吗
$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,但是,如果此行为对您来说还不够,您还可以检查:
您可以执行的第二项检查是验证是否恰好更新了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...
}
}
虽然晚了几年,但也许这可以帮助某人 正如其他人已经提到的,您可以使用受影响的_行来检查准备语句中的更新查询是否确实更新了任何记录。但是,请注意,如果提交的数据与数据库中的记录相同,“受影响的_行”将返回零(0)
我的一个解决方法是为TIMESTAMP创建一个列,其中包含ON UPDATE CURRENT_TIMESTAMP。然后每次运行查询时,我还将向跟踪时间的列传递一个空值——这样,每次执行查询时都会强制更新行。然后,您所要做的就是检查受影响的_行 你可以马上把它读回来并检查。@rage你知道为什么你目前接受的答案是不正确的吗?您知道您可以移动绿色勾号吗?这是否回答了您的问题?基本的mysql扩展不支持预处理语句,因此OP无法访问mysql\u infected\u rows()函数。。。。假设您的意思是mysqli\u impacted\u rows()代替标题将始终有效。。因为它“尝试”并成功运行了查询(可能影响或不影响行)。为什么它是可接受的答案
$stmt->execute()
只有在某些因素阻止查询执行时才会返回false(即internet连接问题)。它与行是否被更新无关。
$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...
}
}