Как вставлять записи в базу данных со значением null, если переменная пустая?
Здравствуйте! Давно мучаюсь с проблемой: при создании новой записи:
$query = mysqli_query($connection, " INSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (NULL, '$val1', '$val2') "); |
$query = mysqli_query($connection, " INSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (NULL, '$val1', '$val2') ");
запись может быть такая:
| ID, VALUE_1, VALUE_2 | NULL, '', '' |
| ID, VALUE_1, VALUE_2 | NULL, '', ''
(то-есть поля, которые могут быть NULL, просто пустый, а не NULL). Как вставлять NULL, если переменная пустая???
Дополнительно:
У вас муська или миранда ? И скорее всего 5-ой версии ? Так как по дефолту 8ка уже начинает сыпать ошибками на нулы, если поле не было специально помечено нулейбел.
Старая муська спокойно кушает sql запросы, где инсерт идет только по части полей. Остальные никто специально в таблице не помечал. При обновлении все это сыпется.
А сколько головной боли раньше доставлял нул в полях по которым агрегатные функции работали или соединение строковых литералов застали ?
По этому желание писать в базу нул вместо дефота вызывает лично у меня не приятие.
На всякий случай: прежде чем продолжать нести бред, сначала проверьте себя
Сначала надо определиться с тем, что такое "пустая переменная".
Если она содержит значение null, то просто вставить через подготовленный запрос, так же, как это надо делать всегда,
выполняя запросы с переменными
$sql = NSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (?,?,?)"; $connection->prepare($sql)->execute([null,$var1, $var2]); |
$sql = NSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (?,?,?)"; $connection->prepare($sql)->execute([null,$var1, $var2]);
(если у вас устаревшая версия РНР, то так)
$sql = NSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (null,?,?)"; $stmt = $connection->prepare($sql); $stmt->bind_param("ss",$var1, $var2) $stmt->execute(); |
$sql = NSERT INTO `table` (`id`, `value_1`, `value_2`) VALUES (null,?,?)"; $stmt = $connection->prepare($sql); $stmt->bind_param("ss",$var1, $var2) $stmt->execute();
Если же переменная содержит пустую строку, то сначала присвоить ей null, например
$var1 = ($var1 !== '') ? $var1 : null;
И потом точно так же подставить в запрос
Ответы:
(NULL, '$val1', '$val2')
- Не стоит оборачивать в кавычки значение, пока не убедились что в нём не null.
'null' для MySQL это уже строка - PHP-шный null при приведении к строке преобразуется в пустую строку. Так что либо заменяйте его на строку NULl сами, либо перестаньте работать с запросами как со строками, и воспользуйтесь методами для построения запросов
- не расскажите подробнее про 2??
- podushka, Prepared Statements
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для вставки записей в базу данных со значением NULL, если переменная пустая, вам следует проверить переменную и в зависимости от ее состояния определить, какое значение вставлять в базу данных.
В случае PHP, вы можете использовать условный оператор if для проверки переменной и установки значения NULL, если переменная пустая. Затем вы можете использовать подготовленные запросы для безопасной вставки данных в базу данных.
Ниже приведен пример кода на PHP, который показывает, как вставлять записи в базу данных со значением NULL, если переменная пустая:
prepare("INSERT INTO table_name (column_name) VALUES (:value)"); // Привязка параметров $stmt->bindParam(':value', $value); // Выполнение запроса $stmt->execute(); ?>
В этом примере, если переменная $_POST['value'] существует и не пустая, то значение переменной присваивается переменной $value. Если переменная $_POST['value'] пустая, то переменной $value присваивается значение NULL. Далее используется подготовленный запрос для вставки данных в базу данных, где значение переменной $value будет вставлено в столбец column_name.
Не забывайте заменить 'localhost', 'test', 'username', 'password' и другие значения на свои реальные данные. Также убедитесь, что вы используете подготовленные запросы для безопасной вставки данных и защиты от SQL-инъекций.