php - MySql NOT NULL 约束不起作用

标签 php mysql null constraints mysqli

我正在尝试在创建为以下内容的客户表中实现 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/

相关文章:

php - 从mysql中选择项目

mysql - 如何在 MYSQL 中选择间隔和下一条记录?

javascript - 尝试使用 Node Express 发送 POST 响应,错误无效状态代码

sql - 为什么 1 = NULL 和 1 != NULL 的结果相同?

c# - 方法中返回null

PHP Gettext 问题(比如非线程安全?)

php - java.net.unknownhostexception 无法解析主机

PHP函数在页面加载时自动调用,而不是通过onclick事件调用

mysql - 流浪者@localhost :~$/usr/bin/mysqld_safe & not working

java - 仅允许 null 选择加入