用准备好的语句更新记录,检查更新是否有效

rag*_*nny 5 php mysql mysqli prepared-statement

我有一个查询更新我的数据库上的记录,它工作正常但我想知道如何检查更新是否已发生所以我可以返回true并显示正确的消息?

现在我知道我可以做一个SELECT查询:

if(stmt->fetch())
Run Code Online (Sandbox Code Playgroud)

如果这是真的我返回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
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

dan*_*era 6

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以做的第二项检查是验证确切的1行已更新:

if($stmt = $conn->prepare($query)) 
{
    $stmt->bind_param('ss', $pwd, $userEmail);
    if ($stmt->execute() and $stmt->affected_rows == 1) {
        //your update is succesfully.
    }
}
Run Code Online (Sandbox Code Playgroud)


Fah*_*kar 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
}
Run Code Online (Sandbox Code Playgroud)

祝好运!!!

  • 为什么它是公认的答案?`$stmt->execute()` 只会在有什么东西阻止了查询的执行(即互联网连接问题)时才会返回 false。它与是否更新行无关。 (3认同)
  • 它会一直有效。因为它“尝试”并成功运行了查询(它可能影响或不影响一行)。 (2认同)