Я подозреваю, что это потому, что в реальной СУБД, в отличие от Oracle :-), существует различие между пустым значением и значением NULL.
Пустые строки идеально подходят для полей NOT NULL
. Единственное значение, которое вы не можете указать в поле NOT NULL
, это зависать, пытаясь вспомнить, ... NULL. Да это оно. НОЛЬ. : -)
В сторону: Oracle много лет назад приняла решение рассматривать пустые VARCHAR как NULL, и это все еще преследует их (или было бы, если бы я был не единственным, кто отказался использовать его из-за этой проблемы).
Если вы хотите, чтобы ваш PHP-код работал как Oracle (где пробелы становятся NULL), вам придется предварительно обработать строку, что-то вроде (псевдокод):
if $first_name == "":
$first_name = "NULL"
else:
$first_name = "'" + $first_name + "'"
: : :
$sql= "INSERT INTO customer(" +
"first_name," +
"last_name," +
"emailpassword," +
"gender," +
"city," +
"dob," +
"pin" +
") VALUES (" +
$first_name + "," +
"'$last_name'" + "," +
"'$email_add'" + "," +
"'$password'" + "," +
"'$gender'" +
",'$city'" + "," +
"'$DOB'" + "," +
"'$pin'" +
")";
и т. Д. Для других полей, которые также могут иметь значение NULL. Я только показал, как это сделать для $first_name
.
Это приведет к тому, что ваш столбец first_name в операторе INSERT
будет либо NULL
, либо значением $first_name
, заключенным в одинарные кавычки.
Имейте в виду, что все эти поля должны быть проверены и / или изменены для предотвращения атак с использованием SQL-инъекций.