Установка значения переменной базы данных в NULL вместо пустой строки

#php #sql #database #insert #null

#php #sql #База данных #вставить #null

Вопрос:

В моей базе данных SQL есть много полей, подобных этому: Тип поля: Текстовое значение Null: Да По умолчанию: NULL

Моя ВСТАВКА выглядит следующим образом:

 INSERT INTO tbl (col,col,col,...) VALUES ('val','val','val',...)
  

Теперь эти кавычки в значениях моего оператора INSERT вставляют » (пустую строку) в базу данных, когда на самом деле я ничего не хочу (NULL).

Итак, я попытался

 if (isset($_POST['title'])) {$newTitle = mysql_real_escape_string(trim($_POST['title']));} else {$newTitle = NULL;}
  

и это просто вставляет ‘NULL’ — строку, содержащую слово NULL.

Что я могу сделать, чтобы убедиться, что мои значения NULL вставлены правильно?

Ответ №1:

То, что у вас есть, прекрасно, но вам нужно объединить это с подготовленным оператором…

  // prepare the statement
    $stmt = $mysqli->prepare("INSERT INTO tbl (title, x,y,z) values (?,?,?,?)");

    $stmt->bind_param($newTitle, $x,$y,$z);

    $x = 'hello, world';
 // execute prepared statement
    $stmt->execute(); 
  

Если x или newTitle равны NULL, они будут равны NULL в базе данных

Комментарии:

1. Да, Подготовленная инструкция, похоже, является решением здесь. Думаю, я пойду узнаю о них. Спасибо!

Ответ №2:

Вы можете попробовать, добавив значение NULL без кавычек, пример ниже:

 INSERT INTO tbl (col,col,col,...) VALUES (NULL,'val','val',...)
  

Также убедитесь, что в столбце, в котором вы хотите иметь чистый null, должен быть отмечен разрешенный NULL.

Комментарии:

1. Столбец настроен на принятие NULL, поэтому я уверен, что база данных исправна. Я не хочу, чтобы значение всегда было NULL, только если ничего не введено, поэтому жесткое кодирование NULL в качестве значения для меня не вариант. Суть вопроса в том, что я пытаюсь избегать пустых строк в моей базе данных. Когда мои значения INSERT заключены в ‘ (как и должно быть в соответствии с синтаксисом SQL), кажется, что у меня остается либо » (пустая строка), либо ‘NULL’ (строка, содержащая NULL).

2. С PHP у вас есть все возможности построить строку SQL так, как вы хотите. Для каждого столбца просто проверьте значение и либо заключите его в кавычки, либо используйте NULL вместо этого.

3. Я думаю, что мое решение заключается в этом, хотя я не знаком с mysqli и подготовленными операторами. Похоже, мне придется найти способ добавлять ЗНАЧЕНИЯ ‘ in (‘val’,’val’, …); динамически.

Ответ №3:

Не указывайте поле в INSERT INTO и не предоставляйте значение. Если у вас есть 3 поля, f1 f2 f3 И вы

 INSERT INTO tbl (f1, f3) VALUES ('something', 'something')
  

Тогда f2 не будет вставлен и по умолчанию будет равно null.

Комментарии:

1. Но я хочу, чтобы значение вставлялось, если что-то было введено. В противном случае я хочу, чтобы оно было установлено в NULL

Ответ №4:

Я использую ‘0’ вместо null. При использовании операторов if вы можете запускать запросы типа

 if($row['f2'] == 0){...
  

Вместо null 🙂

Комментарии:

1. Это исключает строку '0' из допустимого значения определенного столбца…

2. Что вы имеете в виду? Это допустимая строка для MySQL и PHP. Я все время использую 0 в качестве строки.

3. Вы предложили устанавливать пустые столбцы не в NULL , а в 0 . Таким образом, все столбцы со значением 0 будут считаться пустыми. Но если пользователь действительно указал 0 в качестве значения для этого поля, ваш код будет думать, что столбец был пуст.

4. Верно, тогда I зависит от того, что вводит пользователь. Если в данном случае это заголовок, то, скорее всего, заголовок не будет называться ‘0’. Если пользователь действительно вызывает заголовок ‘0’, то простой параметр if может предотвратить его вставку в базу данных и вернуть false.

5. Но почему пустые строки должны преобразовываться в нули? Пустые строки в базах данных допустимы, корректны и широко используются. Использование NULL вместо этого возможно, они даже могут сэкономить немного места. Но '0' больше '' , так зачем его использовать?