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 столбца, которые могут быть или не быть нулевыми

  • Каков наилучший способ перевода системы перевода на веб-сайт php?
  • Будет ли XPath 2.0 и / или XSLT 2.0 реализован на PHP?
  • Как добавить очищенные данные веб-сайта в базу данных?
  • Почему я не могу напрямую получить доступ к массиву с индексом?
  • Случайное проигрывание переменных сеанса только в Google Chrome & URL Rewriting
  • Получить apache linux пользователя из php
  • 3 Solutions collect form web for “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).")"); 
    PHP is the Best Programming Language in the world.