开发者

record updated? when $stmt->execute() $stmt->affected_rows

considering the following for my question:

$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_pa开发者_开发知识库ram('si', $_POST['title'], $_POST['id']);
$stmt->execute();

If i want to check if an insert or a deletion was succesfull, i could easily check for the affected_rows, like this:

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

If $stmt->affected_rows equals -1, it means that $stmt->execute() executed correctly but did not insert the record or did not delete the record successfully.

But, what about an update ? What is the correct way to deal with an update?

The way i do it is by checking for the return value :

$isRecordUpdated = $stmt->execute();

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

Is that the correct way you guys are doing it?


It seems to me that there are really two equivalent and correct ways of doing this: either by checking the return value of execute as you do, or by checking the affected_rows value. -1 means the query errored out; 0 means that it did not affect (delete or update) any rows because there were none matching the query.

Since it seems there is no "better" way, you should pick what would be most convenient for your code. If e.g. using one approach over the other means that you can then share code among all types of queries, you might want to pick that one.


Why not store the value from mysql-affected-rows into a property of that object when you call execute()?

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜