我正在尝试在创建为以下内容的客户表中实现 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 似乎会插入它们?可能是什么问题??
最佳答案
我怀疑这是因为,在真正的 DBMS 中,与 Oracle 不同 :-),空白值和 NULL 值之间存在区别。
空白字符串对 NOT NULL
字段完全有效。您不能在 NOT NULL
字段中输入的唯一值是,等等,努力记住……NULL。对,就是那样。无效的。 :-)
Aside: Oracle made a decision many moons ago to treat empty VARCHARs as NULLs and it still haunts them (or it would if I wasn't the only one that refused to use it because of that problem).
如果您希望您的 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 注入(inject)攻击。
关于php - MySql NOT NULL 约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/846974/