MySQL的NOT NULL约束不起作用
-
21-08-2019 - |
题
我想实现其作为创建的客户表NOT NULL约束:
CREATE TABLE CUSTOMER(
cust_id INT(5) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(cust_id),
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
email VARCHAR(25) NOT NULL,
password VARCHAR(25) NOT NULL,
gender VARCHAR(1) NOT NULL,
city VARCHAR(25) NOT NULL,
dob DATE NOT NULL,
pin INT NOT NULL);
此从表单我传递值,并且将其插入作为后:
$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name','$last_name','$email_add','$password','$gender','$city','$DOB','$pin')";
但是,如果我传递领域的空白值时,MySQL似乎插入呢?什么可以是可能的问题...
解决方案
$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name',".
($last_name?"'".$last_name."'":"NULL").
", '$email_add','$password','$gender','$city','$DOB','$pin')";
这将是:
VALUES('ahm',NULL,'email@a.ddr' ...
和由于NOT NULL什么将被插入。
其他提示
我怀疑是因为,在实际的DBMS,相对于甲骨文:-),有一个空白值和空值之间的区别。
空白字符串是完全有效的用于NOT NULL
字段。唯一的价值,你不应该是能够把在NOT NULL
场,挂,试图记住,...... NULL。对,就是那样。空值。 : - )
旁白:甲骨文做出了一个决定很久以前对待空VARCHAR处理方式与空值,它仍然困扰着他们(或者它会如果我不是拒绝使用它,因为这个问题的只有一个)
。
如果你想你的PHP代码,如Oracle工作(其中的空白成为空值),你将不得不预先处理字符串,喜欢的事(伪代码):
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
。
这将导致INSERT
语句您first_name的柱是要么NULL
或$first_name
的由单引号包围的值。
记住所有这些字段应检查和/或修改,以防止SQL注入攻击。
不隶属于 StackOverflow