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

时间:2012-01-19 14:11:49

标签: php mysql mysqli prepared-statement

我有一个更新我的数据库记录的查询,它工作正常,但我想知道如何检查更新是否已经发生,所以我可以返回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
}

感谢您的帮助。

6 个答案:

答案 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)

如果你正在使用PDO(似乎......),你可以查看rowCount

$affected_rows = $stmt->rowCount();

使用try - catch块来表示错误。

答案 5 :(得分:0)

迟了几年,但也许这可以帮助别人......

正如其他人已经提到的那样,您可以使用affected_rows来检查PREPARED STATEMENT中的UPDATE查询是否确实更新了任何记录。但是,请注意,如果提交的数据与数据库中的记录相同,则'affected_rows'将返回零(0)。

我的解决方法是使用ON UPDATE CURRENT_TIMESTAMP为TIMESTAMP创建一个列。然后,每次运行查询时,我还会将NULL值传递给跟踪时间的列 - 这样每次执行查询时都会强制该行进行UPDATE。然后你要做的就是检查affected_rows。

相关问题