Должны ли запросы на обновление mysqli возвращать результат?
Я обновляю свой PHP-код с mysql на mysqli, но, похоже, не могу найти ответ на этот вопрос: Возвращают ли запросы на обновление mysqli результат?
С mysql я мог бы сделать
$result = mysql_query("UPDATE `data` SET `field1` = 1 WHERE `key` = '$mykey');
И $результат будет истинным, даже если запрос не возвращает никаких строк.
Теперь, однако, в коде mysqli у меня есть что-то вроде этого (обработка ошибок удалена для ясности):
$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
$result = $stmt->get_result();
И $результат является ложным.
Для записи запрос действителен (игнорируйте любые опечатки, которые я возможно, он переписал его в stackoverflow), и поле 1 правильно обновлено в базе данных, как и ожидалось. Кроме того, get_result() отлично работает для запросов select, поэтому дело не в том, что get_result() недоступен.
В принципе, я просто хочу знать, ожидается ли это изменение поведения или мне следует продолжать пытаться найти где-нибудь какую-нибудь ошибку.
2 answers
Подготовленный оператор выполняется с помощью
$stmt->execute();
И execute()
возвращает значение TRUE в случае успеха или FALSE в случае неудачи.
Потому что UPDATE
, DELETE
, INSERT
не приводите ни к какому результату, нет необходимости использовать get_result()
. Если вам нужно знать общее количество затронутых строк, вы можете сделать это с помощью функции mysqli_stmt_affected_rows()
.
Поэтому ваш код может выглядеть следующим образом
$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
//You can get the number of rows affected by your query
$nrows = $stmt->affected_rows;
if (!$nrows) {
//Nothing has been updated
}
Запросы без ВЫБОРА не имеют "набора результатов", поэтому get_result
для них бессмысленно. Если вы хотите знать, был ли запрос на изменение (UPDATE
, INSERT
, или DELETE
), используйте $stmt->affected_rows
. Это будет 0 или ненулевое значение в зависимости от того, сделал ли запрос что-либо.