Должны ли запросы обновления mysqli возвращать результат?

Я обновляю свой PHP-код от mysql до mysqli, но я не могу найти ответ на этот вопрос: возникают ли запросы обновления mysqli?

С mysql я мог бы сделать

$result = mysql_query("UPDATE `data` SET `field1` = 1 WHERE `key` = '$mykey');

и $result будет истинным, даже если запрос не возвращает никаких строк.

Теперь, хотя в коде mysqli у меня есть что-то вроде этого (обработка ошибок устранена для ясности):

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
$result = $stmt->get_result();

и $result - false.

Для записи запрос действителен (игнорируйте любые опечатки, которые я, возможно, переписал в stackoverflow), и поле1 правильно обновлено в базе данных, как и ожидалось. Кроме того, get_result() отлично работает для выбранных запросов, поэтому это не вопрос get_result(), который недоступен.

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

Ответ 1

Подготовленный оператор выполняется с помощью

 $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
}

Ответ 2

Запросы, не относящиеся к SELECT, не имеют "набора результатов", поэтому get_result для них не имеет смысла. Если вы хотите узнать, есть ли запрос модификации (UPDATE, INSERT или DELETE), используйте $stmt->affected_rows. Это будет 0 или отличное от нуля в зависимости от того, сделал ли запрос что-либо.