我想在包含电话区号的表格列中插入NULL
值,其中包含以下属性:
mediumint unsigned DEFAULT NULL
在我的PHP脚本中,我将此检查将空字符串转换为NULL
值:
if($_POST['area_code'] == "") $_POST['area_code'] = NULL;
// clean POST
foreach($_POST as $field => $value)
{
$string[] = $field."=".$value;
}
$sql = "UPDATE Buyer SET ".implode(", ", $string)." WHERE user='$user'";
但是,我得到0
而不是NULL
值。我该怎么做才能插入NULL
?
答案 0 :(得分:5)
您的陈述需要看起来像
UPDATE ... SET area_code = NULL ...
如果您正在将PHP null
转换为字符串,那么它只会转换为""
,即空字符串。您需要将值更改为"NULL"
(字符串“NULL”),而不仅仅是NULL
(类型null
)。在将它们插入SQL查询之前,您还应该认真地逃避/清理/验证您的值,您可以全身心地进行SQL注入。
答案 1 :(得分:3)
来自http://php.net/manual/en/language.types.string.php
NULL始终转换为空字符串。
当你构建$string[]
时,你不能只是连接你的$value
,否则你的空值将被转换为空字符串,它们会转换回零。你必须做一个像以下的测试:
$value == '' ? 'NULL' : $value
答案 2 :(得分:2)
将PHP NULL更改为MySQL NULL(字符串):
if($_POST['area_code'] == '') $_POST['area_code'] = 'NULL';
答案 3 :(得分:2)
NULL总是转换为空字符串。
尝试
if($_POST['area_code'] == "") $_POST['area_code'] = "NULL";
因为null不是字符串
答案 4 :(得分:1)
试试这样:
if($_POST['area_code'] == "") $_POST['area_code'] = "NULL";
答案 5 :(得分:1)
那是因为你将NULL
转换为字符串:
$field."=".$value
您有两种选择:
编写NULL值的异常:
if( is_null($value) ){
$string[] = $field . '=NULL';
}else{
// Please note I've also added proper string escaping
$string[] = $field . "='" . mysql_real_escape_string($value) . "'";
}
切换到支持预准备语句的库(恕我直言,最简单,最可靠的解决方案):
$string[] = $field . '=?';
$params[] = $value;
答案 6 :(得分:1)
对于初学者,你应该逃避这些发布的值(也许你已经是)。其次,PHP中的NULL
始终转换为空字符串(http://php.net/manual/en/language.types.string.php)。相反,使用:
$_POST['area_code'] = 'NULL';
然后将正确创建字符串:
area_code=NULL
代表UPDATE
声明。
答案 7 :(得分:1)
如果您的数据库表列数据类型定义为int / float / numeric,则它取0而不是NULL。因为你正在做的是,使它成为与int / float的列定义不匹配的字符串。