Php MySql NOT NULL约束不起作用

Php MySql NOT NULL约束不起作用,php,mysql,null,constraints,mysqli,Php,Mysql,Null,Constraints,Mysqli,我试图在customer表中实现NOTNULL约束,该表创建为: 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

我试图在customer表中实现NOTNULL约束,该表创建为:

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
字段中输入的唯一值是,请稍候,尝试记住。。。无效的是的,就是这样。空。:-)

旁白:甲骨文在很多个月前做出了一个决定,将空的varchar作为空值处理,但它仍然困扰着它们(或者,如果我不是唯一一个因为这个问题而拒绝使用它的人的话)

如果希望PHP代码像Oracle一样工作(其中空格变为null),则必须预处理字符串,例如(伪代码):

其他字段也可以为NULL,依此类推。我只演示了如何为
$first\u name
执行此操作

这将导致
INSERT
语句中的first\u name列为
NULL
$first\u name
的值,并用单引号括起来

请记住,应检查和/或修改所有这些字段,以防止SQL注入攻击

$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' ...

由于不为空,因此不会插入任何内容。

此处文档中的一些附加信息:


我怎样才能把它做好??我以前用过甲骨文。。我正在尝试MYSQL,并且有点挣扎。如何将表单??此示例代码(““+$first_name+”)中的空值传递给SQL注入攻击。你必须在$first_name中转义引号和反斜杠(对于MySQL,使用addslashes($first_name),除非神奇的引号已经这样做了)。@pts,代码本身就有这个漏洞,是的,它应该是固定的,但这不是问题所在。@pts-您应该始终使用特定于您将要对字符串执行的操作的PHP escape函数,在这种情况下,您应该使用mysql\u real\u escape\u字符串,而不是addslashes。
VALUES('ahm',NULL,'email@a.ddr' ...