当列设置为接受NULL值时,无法在MYSQL中使用表存储NULL值

时间:2017-03-07 09:54:18

标签: php mysql

我有一个PHP脚本,通过它我将数据插入到我的表中但是当我将 org_pid 列设置为空或null时我无法插入数据而我已设置 org_pid 也接受null值但它不接受。这是我的PHP脚本:

<?php

 register();

 function connectToDatabase(){
   $connection=mysqli_connect("localhost","username","password","database");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_set_charset($connection,"utf8");
return $connection;
 }


function register(){

$connection = connectToDatabase();
$Username = $_REQUEST['Username'];
$Pass = $_REQUEST['Pass'];
$Email = $_REQUEST['Email'];
$Phone = $_REQUEST['Phone'];
$UserType= $_REQUEST['UserType'];
$OrgID= $_REQUEST['OrgID'];

if($Username!="" && $Pass!=""){

    $check = mysqli_query($connection,"select count(*) from user where usr_name='$Username'");
    $row = mysqli_fetch_array($check);
    if($row[0]>=1){

        print "old_user";

    }else {

        $result = mysqli_query($connection,"insert into user (org_pid,usr_name,usr_email,usr_password,usr_phone,usr_type) values('$OrgID','$Username','$Email','$Pass','$Phone','$UserType')");

        if($result!=""){
            print "ok";
        }else if($result==""){
            print "no";
        }

        mysqli_close($connection);
    }

}else {
    print "null";
}

}

?>

您可以通过此Link进行检查!链接包含一个链接到我的PHP脚本的简单html页面

1 个答案:

答案 0 :(得分:0)

您的SQL代码在所有值周围都有硬编码引号,因此无论外部输入的值如何,都无法插入NULL。您需要知道NULL本身就是关键字,并且与'NULL'完全不同(这只是一个字符串,其中包含没有任何特殊含义的文字NULL文本)。

你应该通过以下方式解决所有问题:

  1. 使用预准备语句而不是将数据注入查询

  2. 在空字符串上自己分配PHP null(因为它不可能从HTML表单中获得真正的NULL),例如:

    $Email = isset($_REQUEST['Email']) && $_REQUEST['Email']=!''
        ? $_REQUEST['Email']
        : null;