Как передать 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 шт):

Автор решения: Apelsin2020

Так так и вставляйте:

INSERT INTO products (name) VALUES (NULL)

Или вот так:

$param = NULL
INSERT INTO products (name) VALUES ($param)

Когда вы ставите NULL в '' - получается строка, в первом примере вы делаете это прям в запросе, во втором - когда объявляете переменную

А можно просто поставить значение по умолчанию, потому что, как я понимаю, поле будет не одно, а несколько. Тогда при запросе просто не заносите name и после запроса в базе будет NULL

→ Ссылка
Автор решения: Mike

Не подставляйте переменные в текст запроса, а используйте подготовленные выражения и привязку тогда любые значения, включая NULL будут садиться правильно. Плюс к этому данный подход защищает вас от возможных SQL-инъекций и взлома сайта через них.

$param = NULL;
$stmt = $mysqli->prepare("INSERT INTO `products` (`name`) VALUES (?)");
$stmt->bind_param('s', $param);
$stmt->execute();

Обратите внимание, обрамление в кавычки в тексте запроса при этом вообще не требуется. А следовательно переменная $param может принимать любое значение (даже содержащее кавычки) и в коде дополнительно предусматривать разные случаи не требуется.

→ Ссылка
Автор решения: Borislav

Простой NULL уйдет в запрос как '', mysql ругнется, скорее всего, что вы не тот тип данных ему отдаете, а если отдать 'NULL', то mysql запишет его как NULL в таблицу.

→ Ссылка