Как передать NULL через переменную в sql запрос?
Есть переменная:
$param = NULL;
Делаю такой запрос:
$mysqli->query("INSERT INTO `products` (`name`) VALUES ('$param')");
В итоге запрос получается таким:
INSERT INTO `products` (`name`) VALUES ('')
А если переменную указать так:
$param = 'NULL';
Тогда запрос будет вида:
INSERT INTO `products` (`name`) VALUES ('NULL')
тут получается что NULL идет как текст (строка)
А мне нужно чтобы был таким:
INSERT INTO `products` (`name`) VALUES (NULL)
Ответы (3 шт):
Так так и вставляйте:
INSERT INTO products (name) VALUES (NULL)
Или вот так:
$param = NULL
INSERT INTO products (name) VALUES ($param)
Когда вы ставите NULL в '' - получается строка, в первом примере вы делаете это прям в запросе, во втором - когда объявляете переменную
А можно просто поставить значение по умолчанию, потому что, как я понимаю, поле будет не одно, а несколько. Тогда при запросе просто не заносите name и после запроса в базе будет NULL
Не подставляйте переменные в текст запроса, а используйте подготовленные выражения и привязку тогда любые значения, включая NULL будут садиться правильно. Плюс к этому данный подход защищает вас от возможных SQL-инъекций и взлома сайта через них.
$param = NULL;
$stmt = $mysqli->prepare("INSERT INTO `products` (`name`) VALUES (?)");
$stmt->bind_param('s', $param);
$stmt->execute();
Обратите внимание, обрамление в кавычки в тексте запроса при этом вообще не требуется. А следовательно переменная $param может принимать любое значение (даже содержащее кавычки) и в коде дополнительно предусматривать разные случаи не требуется.
Простой NULL уйдет в запрос как '', mysql ругнется, скорее всего, что вы не тот тип данных ему отдаете, а если отдать 'NULL', то mysql запишет его как NULL в таблицу.