Запрос на вставку NULL php

277
01 июля 2018, 14:10

Как сделать запрос на вставку NULL? Точнее как сделать это через переменную $date_contract_finish

if ($_GET['date_contract_finish'] == ''){
  $date_contract_finish = NULL;
}else{
  $date_contract_finish = $_GET['date_contract_finish'];
}
$sql = "UPDATE project_registry SET 
        date_contract_finish = '$date_contract_finish' 
         WHERE id = '$id'"

В итоге вставляется пустая строка, а необходимо вставить null.

Answer 1
if ($_GET['date_contract_finish'] == ''){
  $date_contract_finish = "NULL";
}else{
  $date_contract_finish = "'" . $_GET['date_contract_finish'] ."'";
}
$sql = "UPDATE project_registry SET 
        date_contract_finish = $date_contract_finish
         WHERE id = '$id'"
Answer 2

Используйте механизм prepared statements. Что PDO что mysqli корректно передают NULL через prepared statements. И, что существенно важнее, закроете открытую дыру для sql-инъекции.

$stmt = $pdo->prepare("UPDATE project_registry SET 
    date_contract_finish = :date_contract_finish
     WHERE id = :id");
$stmt->execute([
    'date_contract_finish' => empty($_GET['date_contract_finish']) ? null : $_GET['date_contract_finish'],
    'id' => $id,
]);

Если вам действительно не нужно валидировать формат. Хотя скорее всего вам сперва нужно проверить, что вам передали что-то похожее на дату.

READ ALSO
парсер/грабер сайта. Как выбрать текст из div

парсер/грабер сайта. Как выбрать текст из div

Доброго времени суток всем кто читаетНе получается отделить время добавления статьи от категории

284
Ajax. Передача спецсимвола из php

Ajax. Передача спецсимвола из php

Ситуация такая: есть форма, которую заполняет пользователь, данные обрабатываются в php-скрипте, затем возвращается ответПри определенном...

251
PHP умножение данных массива по принципу 1-2|1-3|2-3

PHP умножение данных массива по принципу 1-2|1-3|2-3

Есть динамический массив принципа:

251
QML. Последний дочерний элемент. C++

QML. Последний дочерний элемент. C++

Как получить последний дочерний элемент у объекта?

235