Php 记录更新了吗?当$stmt->;execute()$stmt->;受影响的行

Php 记录更新了吗?当$stmt->;execute()$stmt->;受影响的行,php,prepared-statement,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->p

就我的问题考虑以下几点:

$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();
如果我想检查插入或删除是否成功,我可以很容易地检查受影响的_行,如下所示:

if ($stmt->affected_rows > 0) {
   $success = true;
} else {
   $err_msg = $stmt->error;
}
如果$stmt->infected_rows等于-1,则表示$stmt->execute()已正确执行,但未插入记录或未成功删除记录

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

我的方法是检查返回值:

$isRecordUpdated = $stmt->execute();

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

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

在我看来,实际上有两种等效且正确的方法来做这件事:要么像你们做的那样检查
execute
的返回值,要么检查
受影响的行
值-1表示查询出错;0表示它不影响(删除或更新)任何行,因为没有与查询匹配的行


因为似乎没有“更好”的方法,所以您应该选择最适合您的代码的方法。例如,如果使用一种方法而不是另一种方法意味着您可以在所有类型的查询中共享代码,那么您可能希望选择该方法。

为什么不在调用
execute()
时将
mysql受影响行中的值存储到该对象的属性中