我正在尝试在customer表中实现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似乎插入它们?可能出现什么问题?
答案 0 :(得分:5)
我怀疑这是因为,在真正的DBMS中,而不是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
执行此操作。
这会导致INSERT
语句中的first_name列为NULL
或单引号括起的$first_name
值。
请记住,应检查和/或修改所有这些字段以防止SQL注入攻击。
答案 1 :(得分:3)
$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,不会插入任何内容。
答案 2 :(得分:0)