假设您有一个表单,其中包含来自数据库的预填充数据,并且您允许您的用户进行更改并保存表单。如果用户点击保存按钮而不做任何更改,MySQL 将不会真正执行写入操作,因此受影响的行将返回 0。
我理解这种行为,但除了检查受影响的行数之外,确定更新是否失败的最佳做法是什么?
区分实际失败的更新和“成功”但导致 0 受影响的行以便我可以向用户提供反馈的更新的最佳实践是什么?
假设您有一个表单,其中包含来自数据库的预填充数据,并且您允许您的用户进行更改并保存表单。如果用户点击保存按钮而不做任何更改,MySQL 将不会真正执行写入操作,因此受影响的行将返回 0。
我理解这种行为,但除了检查受影响的行数之外,确定更新是否失败的最佳做法是什么?
区分实际失败的更新和“成功”但导致 0 受影响的行以便我可以向用户提供反馈的更新的最佳实践是什么?
只需检查执行查询后是否没有发生错误。
如果您使用mysql
,请检查mysql_error():
if (!mysql_error()) print 'all is fine';
与mysqli相同。
如果查询失败,[affected_rows()][1] 为 -1,而不是零。
[1]:http ://www.php.net/manual/en/function.mysql-affected-rows.php
如果没有对行进行更改(相同的值),或者如果 mysql 没有找到要更新的行,它可能会返回 0。由于语法错误,它只会返回 -1
变体1:
mysql_query() or die('error');
变体2:
$conn = mysql_query();
if(!$conn) {//Error code here}
变体3:
try {
$conn = mysql_query();
if (!$conn) throw new Exception("mysql Error");
} catch(Exception $e) {
echo $e->getMessage();
}
如果由于语法错误而导致更新“失败”,或者其他 mysql 将在实际 mysql 查询上返回错误代码,并且受影响的行将返回另一个错误。
以 PHP 为例:
$qry = mysql_query("update blah where IamaSyntaxerror,33");
if ($qry === FALSE) { echo "an error has occured"; }
else { mysql_affected_rows() == 0 means no updates occured