用户填写表单,如果他们选择不填写不需要的字段,则执行以下操作:
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']=null;
Run Code Online (Sandbox Code Playgroud)
但是当我在mysql查询中使用session变量时,结果不是null,而是0.该列是一个允许NULL的tinyint(4).
为什么我得到0而不是NULL?
可能是因为PHP没有将'null'转换为'NULL'.您可能只是插入一个空值.
INSERT INTO TABLE (`Field`) ('')
Run Code Online (Sandbox Code Playgroud)
您可能将列的默认值设置为"0",这意味着它将插入0,除非您指定数字或 NULL
INSERT INTO TABLE ('Field') (NULL)
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请在执行查询之前检查Null值.
foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
}
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,准备好的陈述将有远见自动地做到这一点.但是,如果您正在进行内联语句,则需要添加更多内容.
MySQL值必须有引号,但Null不会.因此,您需要使用此引用其他所有内容
foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
else
{
// Real Escape for Good Measure
$values[$key] = "'" . mysql_real_escape_string($value) . "'";
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在创建语句时,请确保不在任何值周围加上引号
$SQL = "INSERT INTO TABLE (Field) VALUES(".$values['field'].")";
Run Code Online (Sandbox Code Playgroud)
变成
$SQL = "INSERT INTO TABLE (Field) VALUES("Test Value")";
Run Code Online (Sandbox Code Playgroud)
要么
$SQL = "INSERT INTO TABLE (Field) VALUES(NULL)";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16516 次 |
| 最近记录: |