记录更新?当$ stmt-> execute()$ stmt-> affected_rows时

时间:2011-07-04 20:12:03

标签: php prepared-statement

考虑以下问题:

$success = false;
$err_msg = '';
$sql = 'UPDATE task SET title = ? WHERE task_id = ?';

$conn = connect('w'); // create database connection: r= read, w= write

$stmt = $conn->stmt_init(); // initialize a prepared statement
$stmt->prepare($sql);
$stmt->bind_param('si', $_POST['title'], $_POST['id']);
$stmt->execute();

如果我想检查插入或删除是否成功,我可以轻松检查affected_rows,如下所示:

if ($stmt->affected_rows > 0) {
   $success = true;
} else {
   $err_msg = $stmt->error;
}

如果$ stmt-> affected_rows等于-1,则表示$ stmt-> execute()正确执行但未插入记录或未成功删除记录。

但是,更新怎么样?处理更新的正确方法是什么?

我这样做的方法是检查返回值:

$isRecordUpdated = $stmt->execute();

if (!$isRecordUpdated) {
   // execute failed, therefore NO record updated!
} else {
   //execute success, record updated!
}

这是你们这样做的正确方法吗?

2 个答案:

答案 0 :(得分:0)

在我看来,实际上有两种等效且正确的方法:通过检查execute的返回值,或者检查affected_rows值。 -1表示查询出错; 0意味着它不会影响(删除或更新)任何行,因为没有匹配查询。

由于似乎没有“更好”的方式,您应该选择对您的代码最方便的方法。如果是使用一种方法而不是另一种方法意味着您可以在所有类型的查询之间共享代码,您可能想要选择那个。

答案 1 :(得分:0)

为什么不在调用mysql-affected-rows时将execute()的值存储到该对象的属性中?

http://php.net/manual/en/function.mysql-affected-rows.php

相关问题