Я использовал стандартные инструкции mysql_connect(), mysql_query() и т.д. для работы с PHP с PHP. В последнее время я перешел на использование замечательного класса MDB2. Наряду с этим, я использую подготовленные инструкции, поэтому мне не нужно беспокоиться о том, как избежать ввода и атаки SQL-инъекций.
Однако есть одна проблема, с которой я сталкиваюсь. У меня есть таблица с несколькими столбцами VARCHAR, которые указаны как not-null (то есть не позволяют значения NULL). Используя старые команды MySQL PHP, я мог бы делать такие вещи без проблем:
INSERT INTO mytable SET somevarchar = '';
Теперь, если у меня есть запрос вроде:
INSERT INTO mytable SET somevarchar = ?;
И затем в PHP у меня есть:
$value = "";
$prepared = $db->prepare($query, array('text'));
$result = $prepared->execute($value);
Это вызовет ошибку "null value violates not-null constraint
"
Как временное обходное решение, я проверяю, является ли $value
пустым, и измените его на " "
(одно пространство), но это ужасный взлом и может вызвать другие проблемы.
Как я должен вставлять пустые строки с подготовленными операторами, не пытаясь вместо этого вставить NULL?
РЕДАКТИРОВАТЬ: Это слишком большой проект, чтобы пройти через всю мою кодовую базу, найти везде, где используется пустая строка ", и вместо этого изменить его на использование NULL. Мне нужно знать, почему стандартные запросы MySQL обрабатывают" "и NULL как две отдельные вещи (как я думаю, это правильно), но подготовленные заявления преобразуют" " в NULL.
Обратите внимание, что "" и NULL - это не то же самое. Например, SELECT NULL = "";
возвращает NULL
вместо 1
, как вы ожидали.