#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'
больше''
, так зачем его использовать?