Melhor prática para inserir o NULL no MySQL usando o PHP

function save($gmt, $name, $address, $phone, $remark) { $query= "INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('$gmt', '$name', '$address', '$phone', '$remark')"; mysql_query($query); } 

Aqui o endereço, o telefone e a observação podem ser valor NULL. Eu preciso disso para que quando eu passar um parâmetro nulo para minha function, ele armazena um valor vazio no database (NULL). Preciso saber qual é a melhor solução para fazer isso.

Obrigado.

Esta é a solução do PHP, mas você precisa usar o mysqli porque o mysql está desaprovado, leia mais sobre o mysqli . Além disso, você deve considerar a injeção SQL

 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", "", "")."
"; save("a", "b", "c", "d", "")."
"; save("a", "b", "c", "d", "e")."
"; /* 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

Tente mudar para declarações preparadas (o qual, como um bônus, é menos propenso às injeções de SQL).

 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(); } 

Isso irá lidar com os valores null corretamente no MySQL

O PHP não imprime o NULL – é apenas uma string vazia. Então, no seu exemplo, você tentará inserir '' , que em SQL novamente é uma string vazia.

Você deve usar NULL (sem aspas).

E a melhor prática para conseguir isso é usar uma ORM ou uma estrutura de PHP com uma camada de abstração de database que faça isso por você.

Usando o operador ternário, você também pode usar isso

 $add = ($address == '' ? NULL : $address); $phn = ($phone == '' ? NULL : $phone); $rmk = ($remark == '' ? NULL : $remark);