Intereting Posts
Есть ли способ переопределить подсказку типа к классу потомков при расширении абстрактного класса? strpos () с несколькими иглами? Apache не будет устанавливать заголовки для скрипта PHP Выберите строки из таблицы MySQL, где временная метка PHP старше X Как обеспечить ввод пользователем CSS, а не вредоносного кода? CodeIgniter Две таблицы Left Join не возвращает идентификатор условия соединения левой таблицы при пропуске в правой таблице FPDF – Как я могу использовать разные страницы разных размеров? Предварительная загрузка изображений SVG Каков наилучший способ получить последний элемент массива без его удаления? Доступ к данным сеанса за пределами Joomla Недействительный месяц в oracle при использовании add_months Есть ли способ использовать Python-код из PHP? Обновление нескольких строк в Codeigniter Может ли TCPDF / FPDI принимать PDF как строку? LAMP отображает php-ошибки

PHP / MySQL Вставить нулевые значения

Я борюсь с некоторым кодом PHP / MySQL. Я читаю из 1 таблицы, меняя некоторые поля, а затем записывая в другую таблицу, ничего не происходит, если вставка и одно из значений массива имеет значение null, когда я хотел бы, чтобы он вставлял нуль в базу данных (для поля допустимы пустые значения). Это выглядит примерно так:

$results = mysql_query("select * from mytable"); while ($row = mysql_fetch_assoc($results) { mysql_query("insert into table2 (f1, f2) values ('{$row['string_field']}', {$row['null_field']}); } 

Не каждая строка имеет нулевое значение, и в моем запросе есть больше полей и 2 столбца, которые могут быть или не быть нулевыми

Solutions Collecting From Web of "PHP / MySQL Вставить нулевые значения"

Это один из примеров, когда использование подготовленных инструкций действительно избавляет вас от некоторых проблем.

В MySQL, чтобы вставить нулевое значение, вы должны указать его во время INSERT или оставить поле, которое требует дополнительного разветвления:

 INSERT INTO table2 (f1, f2) VALUES ('String Value', NULL); 

Однако, если вы хотите вставить значение в это поле, вы должны теперь развернуть свой код, чтобы добавить одинарные кавычки:

 INSERT INTO table2 (f1, f2) VALUES ('String Value', 'String Value'); 

Подготовленные заявления автоматически делают это за вас. Они знают разницу между string(0) "" и null и правильно записывают ваш запрос:

 $stmt = $mysqli->prepare("INSERT INTO table2 (f1, f2) VALUES (?, ?)"); $stmt->bind_param('ss', $field1, $field2); $field1 = "String Value"; $field2 = null; $stmt->execute(); 

Он избегает ваших полей для вас, гарантирует, что вы не забудете привязать параметр. Нет причин оставаться с расширением mysql . Вместо этого используйте mysqli и его готовые заявления . Вы спасете себе мир боли.

Я думаю, вам нужны цитаты вокруг вашего {$row['null_field']} , поэтому '{$row['null_field']}'

Если у вас нет кавычек, вы иногда получите инструкцию insert, которая выглядит так: insert into table2 (f1, f2) values ('val1',) которая является синтаксической ошибкой.

Если это числовое поле, вам нужно будет провести над ним некоторое тестирование, и если в null_field нет значения, явно установите его на null.

Для полей, где допустим NULL , вы можете использовать var_export($var, true) для вывода string , integer или NULL литерала. Обратите внимание, что вы не будете окружать вывод кавычками, потому что они будут автоматически добавлены или опущены.

Например:

 mysql_query("insert into table2 (f1, f2) values ('{$row['string_field']}', ".var_export($row['null_field'], true).")");