Я выполняю команды SQL (MySQL) из PHP. Есть несколько возможных результатов для каждого выполнения:
WHERE
оговорка)Мне интересно, как различить # 1 и 3: оба случая возвращают ноль в качестве числа затронутых строк, поэтому:
$result = $db->exec($statement)
буду иметь $result == 0
в обоих случаях. Как я могу определить разницу?
РЕДАКТИРОВАТЬ: Я хотел спросить, как провести различие между сценариями ДВА и 3, а не 1 и 3! Приносим извинения за неудобства…
Простым решением было бы два запроса.
Во-первых, запустите запрос SELECT, чтобы проверить, существует ли строка, с помощью mysqli_num_rows ().
Затем, если строка существует, вы можете выполнить запрос UPDATE и использовать mysqli_affered_rows ().
…Я предложу потенциальную альтернативу для тех, кто ищет один звонок. Я не знаю, если вы заинтересованы в выполнении каких-либо вставок или просто ОБНОВЛЕНИЯ. Ниже приведена пища для размышлений:
С верхнего комментария @ http://php.net/manual/en/mysqli.affected-rows.php :
В запросах «INSERT INTO ON DUPLICATE KEY UPDATE», хотя можно ожидать, что disabled_rows вернет только 0 или 1 на строку в успешных запросах, фактически может вернуть 2.
Из руководства Mysql: «С ON DUPLICATE KEY UPDATE значение затронутых строк на строку равно 1, если строка вставлена как новая строка, и 2, если существующая строка обновлена».
Увидеть: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
Вот разбивка суммы за ряд:
+0: строка не была обновлена или вставлена (вероятно, потому что строка уже существовала, но никакие значения полей фактически не изменялись во время ОБНОВЛЕНИЯ)
+1: строка была вставлена
+2: строка была обновлена
Можете ли вы сделать это, чтобы удовлетворить ваши потребности?
Других решений пока нет …