Mysql_affected_rows() возвращает 0 для инструкции UPDATE, даже если обновление действительно происходит
Я пытаюсь получить количество строк, затронутых в простом запросе обновления mysql. Однако, когда я запускаю этот код ниже, PHP mysql_affected_rows() всегда равен 0. Неважно, если foo = 1 уже (в этом случае функция должна правильно возвращать 0, так как ни одна строка не была изменена), или если foo в настоящее время равно некоторому другому целому числу (в этом случае функция должна возвращать 1).
$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";
mysql_query($updateQuery);
if (mysql_affected_rows() > 0) {
echo "affected!";
}
else {
echo "not affected"; // always prints not affected
}
Работает инструкция UPDATE. INT изменяется в моей базе данных. Я также дважды проверил, что соединение с базой данных не закрывается заранее или что-то напуганное. Имейте в виду, что mysql_affected_rows необязательно требует, чтобы вы передавали идентификатор ссылки на соединение, хотя я тоже это пробовал.
Подробная информация о функции: mysql_affected_rows
Любые идеи?
Ответы
Ответ 1
Более новые версии MySQL достаточно умны, чтобы проверить, выполнено ли изменение или нет. Допустим, вы активировали выражение UPDATE:
UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234
Позволяет сказать, если значение столбца уже равно 1; то процесс обновления не выполняется, поэтому mysql_affected_rows() возвращает 0; else if Column lazy имеет другое значение, а не 1, затем возвращается 1. Нет других возможностей, кроме человеческих ошибок.
Ответ 2
Вы пытались напрямую использовать функцию MySQL ROW_COUNT
?
mysql_query('UPDATE myTable SET foo = 1 WHERE bar = 2');
if(mysql_result(mysql_query('SELECT ROW_COUNT()'), 0, 0)) {
print "updated";
}
else {
print "no updates made";
}
Дополнительная информация об использовании ROW_COUNT
и других информационных функций MySQL находится по адресу: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count
Ответ 3
mysqli_affected_rows требует передать ссылку на подключение к базе данных в качестве единственного параметра вместо ссылки на ваш запрос mysqli. например.
$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname");
$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";
echo mysqli_affected_rows($dbref);
НЕ
echo mysqli_affected_rows($updateQuery);
Ответ 4
Попробуйте подключиться следующим образом:
$connection = mysql_connect(...,...,...);
а затем вызовите это
if(mysql_affected_rows($connection) > 0)
echo "affected";
} else { ...
Ответ 5
Я думаю, вам нужно попробовать что-то еще в обновлении, а затем foo = 1. Поместите что-то общее, но вы увидите, что он обновляется или нет без цикла. то, если это так, ваш цикл if должен работать.
Ответ 6
Вы работаете над этим?
$timestamp=mktime();
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2";
mysql_query($updateQuery);
$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}";
$res=mysql_query($updateQuery);
$row=mysql_fetch_row($res);
if ($row[0]>0) {
echo "affected!";
}
else {
echo "not affected";
}
Ответ 7
Была моя мысль!
Я как раз собирался сказать, чтобы функция вызывалась много раз!
Небольшой совет:
попробуйте использовать isset() и POST/GET или что-то в этом роде;
if ( isset( $_POST['Update'] == 'yes' ) ) :
// your code goes here ...
endif;
Надеюсь, что это было ясно и полезно, Ciao:)