Как определить, успешно ли выполнен запрос на обновление MySQL, если данные, переданные в запросе, совпадают с данными, уже находящимися в базе данных? - PullRequest
10 голосов
/ 26 мая 2011

Допустим, у вас есть форма с предварительно заполненными данными из вашей базы данных, и вы позволяете своим пользователям вносить изменения и сохранять форму.Если пользователь нажимает кнопку сохранения без внесения каких-либо изменений, MySQL фактически не будет выполнять операцию записи, и поэтому disabled_rows вернет 0.

Я понимаю поведение, но какова лучшая практика для определения, еслиобновление не выполнено, кроме проверки количества затронутых строк?

Какова лучшая практика для разграничения между обновлением, которое действительно не удалось, и тем, которое "прошло успешно", но привело к 0 затронутым_рядам, чтобы я мог предоставить обратную связь дляпользователь?

Ответы [ 4 ]

6 голосов
/ 26 мая 2011

Просто проверьте, не было ли ошибок после выполнения запроса.
Если вы используете mysql, отметьте mysql_error () :
if (!mysql_error()) print 'all is fine';
То же самое для mysqli .

4 голосов
/ 26 мая 2011

Вариация 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();
}
4 голосов
/ 26 мая 2011

[disabled_rows ()] [1] равно -1, если запрос не выполнен, не ноль.

[1]: http://www.php.net/manual/en/function.mysql-affected-rows.php

Может возвращаться0, если в строку не было внесено никаких изменений (те же значения), или если mysql не нашел строку для обновления.Он вернет только -1 из-за синтаксиса erro

2 голосов
/ 26 мая 2011

, если обновление "не удается" из-за синтаксической ошибки, или другой mysql вернет код ошибки в текущем запросе mysql, а disabled_rows вернется с еще одной ошибкой.

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
...