我想实现其作为创建的客户表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注入攻击。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top