Обновление столбцов, в которых ранее содержалось значение NULL, значением не вызывает изменения строк?

#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, когда я читаю массив, чтобы получить новые значения для обновления.