#php #mysqli #rows-affected
Вопрос:
Я обновляю столбцы в строках таблицы.
Ранее для этих столбцов было установлено значение NULL.
После ОБНОВЛЕНИЯ в столбцах теперь есть данные.
Но «affected_rows» остается 0?
Есть идеи, почему?
$query = $conn->prepare("UPDATE table
SET column1=?
WHERE column2 LIKE ? AND column3 IS NULL");
$query->bind_param('ss', $value1, $value2);
$query->execute();
echo "Affected rows: " . $query -> affected_rows . "<br />"; // Returns 0 everytime?
Комментарии:
1. Являются ли предыдущие вызовы на самом деле успешными или просто молчаливо завершаются неудачей? Вы добавили код, чтобы убедиться, что предварительные и последующие условия соответствуют вашим ожиданиям?
2. Что ж, таблица базы данных обновляется, если это то, что вы подразумеваете под успехом. Я проверяю базу данных вручную после запуска кода, и обновления работают.
3. Этот код является частью цикла «while», но это не должно на него влиять??
Ответ №1:
Вам необходимо изменить свой запрос, чтобы правильно оценить нулевые значения. Поэтому измените ключевое слово, например, на » ЕСТЬ
$query = $conn->prepare("UPDATE table
SET column1=?
WHERE column2 LIKE ? AND column3 IS NULL");
Комментарии:
1. Да, это была просто опечатка здесь, в фактическом коде указано значение NULL. Я также поместил туда данные типа», а затем проверил их как «И column3 = » » с той же проблемой. Данные обновляются, но affected_rows по-прежнему возвращает 0.
2. Этот код является частью цикла «while», но это не должно на него влиять??
3. В этом случае вам следует проверить, имеет ли столбец 3 нулевое значение (не пустую строку) в вашей базе данных. Кроме того, если код является частью цикла, вам, возможно, потребуется проверять инструкцию execute в каждом цикле с помощью отладчика (это действительно помогает), потому что в конце вы получите затронутые строки. В любом случае, почему он в цикле?
4. Столбец 3 имеет нулевое значение, когда я смотрю на него через MySQL (до обновления), а не после, я тоже несколько раз устанавливал его равным нулю. Это происходит в цикле WHILE, когда я читаю массив, чтобы получить новые значения для обновления.