Как вставлять записи в базу данных со значением null, если переменная пустая?

Ссылка скопирована
PHP
1 ответ

Здравствуйте! Давно мучаюсь с проблемой: при создании новой записи:

$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 запросы, где инсерт идет только по части полей. Остальные никто специально в таблице не помечал. При обновлении все это сыпется.
    А сколько головной боли раньше доставлял нул в полях по которым агрегатные функции работали или соединение строковых литералов застали ?
    По этому желание писать в базу нул вместо дефота вызывает лично у меня не приятие.
  • Олег, я с "легаси" работал когда вы ещё в памперсы писялись. И если у поля стоит NOT NULL и не указано DEFAULT, то даже в 3.22 mysql выдавала ошибку, если не передать поле вообще. Поскольку это положено по стандарту.

    На всякий случай: прежде чем продолжать нести бред, сначала проверьте себя

  • Ипатьев, увы хотя я и родился после 27 апреля 1965, вместо памперсов у меня были куски пеленки
  • Сначала надо определиться с тем, что такое "пустая переменная".

    Если она содержит значение 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')

    1. Не стоит оборачивать в кавычки значение, пока не убедились что в нём не null.
      'null' для MySQL это уже строка
    2. PHP-шный null при приведении к строке преобразуется в пустую строку. Так что либо заменяйте его на строку NULl сами, либо перестаньте работать с запросами как со строками, и воспользуйтесь методами для построения запросов
    • не расскажите подробнее про 2??
    • podushka, Prepared Statements
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Юрий Linux Ответ

    Для вставки записей в базу данных со значением NULL, если переменная пустая, вам следует проверить переменную и в зависимости от ее состояния определить, какое значение вставлять в базу данных.

    В случае PHP, вы можете использовать условный оператор if для проверки переменной и установки значения NULL, если переменная пустая. Затем вы можете использовать подготовленные запросы для безопасной вставки данных в базу данных.

    Ниже приведен пример кода на PHP, который показывает, как вставлять записи в базу данных со значением NULL, если переменная пустая:

    prepare("INSERT INTO table_name (column_name) VALUES (:value)");
     
    // Привязка параметров
    $stmt->bindParam(':value', $value);
     
    // Выполнение запроса
    $stmt->execute();
    ?>

    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-инъекций.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно