How to insert an actual NULL value into a nullable column?

前端 未结 5 1964
盖世英雄少女心
盖世英雄少女心 2020-12-20 15:26
function save($gmt, $name, $address, $phone, $remark)
{
    $query= \"INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES (\'$gmt\', \'$name\', \         


        
相关标签:
5条回答
  • 2020-12-20 16:07

    This is PHP solution, but you have to use mysqli because mysql deprecated, please read more about mysqli. Also, you must consider SQL injection

    function save($gmt, $name, $address, $phone, $remark)
    {
      if(empty($phone)){
       $phone = 'NULL';
      }else{
       $phone = "'".$phone."'";
      }
      if(empty($remark)){
       $remark = 'NULL';
      }else{
       $remark = "'".$remark."'";
      }
        $query= "INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('$gmt', '$name', '$address', $phone, $remark)";
        mysql_query($query);
    }
    //tests
    save("a", "b", "c", "", "")."<br>";
    save("a", "b", "c", "d", "")."<br>";
    save("a", "b", "c", "d", "e")."<br>";
    /*
    INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', NULL, NULL)
    INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', NULL)
    INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', 'e')
    */
    ?>
    

    DEMO

    0 讨论(0)
  • 2020-12-20 16:10

    PHP doesn't print NULL - it is just an empty string. So in your example you will try to insert '', which in SQL again is an empty string.

    You have to use NULL (without quotes).

    And the best practice to achieve that is to use an ORM or a PHP framework with a database abstraction layer which does this for you.

    0 讨论(0)
  • 2020-12-20 16:18

    fields can be NULL

    -> qtd_aulas_previstas

    -> qtd_aulas_dadas

    $qtd_aulas_previstas = ( empty($qtd_aulas_previstas) ? 'NULL' : "'".$qtd_aulas_previstas."'");
    $qtd_aulas_dadas     = ( empty($qtd_aulas_dadas)     ? 'NULL' : "'".$qtd_aulas_dadas."'");
    
    
    //insere os dados na tabela
    $inserir_tb = mysqli_query($conexao, "INSERT INTO tb_turma_bimestre VALUES('', '$cod_turma', '$cod_bimestre', $qtd_aulas_previstas, $qtd_aulas_dadas, '$data_abertura', '$data_encerramento', '$date_time', '$nome_login')")or die("Error2: " .mysqli_error($conexao));
    
    
    
    0 讨论(0)
  • 2020-12-20 16:26

    Try switching to prepared statements (which as a bonus is less prone to SQL injections).

    function save($gmt, $name, $address, $phone, $remark)
    {
        if(!isset($phone) || empty($phone)) { $phone = null; }
        if(!isset($remark) || empty($remark) { $remark = null; }
    
        $db = new PDO(...);
    
        $stmt = $db->prepare("INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES (:gmt, :name, :address, :phone, :remark)");
        $stmt->bindValue("gmt", $gmt, PDO::PARAM_STR);
        $stmt->bindValue("name", $name, PDO::PARAM_STR);
        $stmt->bindValue("address", $address, PDO::PARAM_STR);
        $stmt->bindValue("phone", $phone, PDO::PARAM_STR);
        $stmt->bindValue("remark", $remark, PDO::PARAM_STR);
        $stmt->execute();
    }
    

    This will handle the null values correctly in MySQL

    0 讨论(0)
  • 2020-12-20 16:26

    Using ternary operator, you can also use this

    $add = ($address == '' ? NULL : $address);
    $phn = ($phone == '' ? NULL : $phone);
    $rmk = ($remark == '' ? NULL : $remark);
    
    0 讨论(0)
提交回复
热议问题