MySQL - 如何插入可能为null的值

时间:2011-11-29 00:26:28

标签: php mysql insert null

我在PHP脚本中有一些值,我必须在MySQL表中插入。以下是3个日期d1d2d3

我有这个默认语句将值插入数据库:

insert into mytable set a=1, b=2, d1='$val', d2='$val2', d3='$val3'

是否有一种非常简单的方法可以编写SQL语句以插入d1,d2和d3 NULL值而不是$val1$val2和{{$val3中的一个(或多个)日期1}}是零?无需处理新的PHP变量?

4 个答案:

答案 0 :(得分:4)

假设你在$data数组中拥有它:

$query_string = "insert into mytable set a=1, b=2, d1=" .
    (isset($data['val1']) ? "'" . $data['val1'] . "'" : 'NULL') . ", d2=" .
    (isset($data['val2']) ? "'" . $data['val2'] . "'" : 'NULL') . ", d3=" .
    (isset($data['val3']) ? "'" . $data['val3'] . "'" : 'NULL') . ";";

该字符串将包含例如。如果数组中的值不存在或等于d2=NULL,则d2='xyz'代替null

您还必须确保要粘贴到查询中的字符串已正确清理(例如,使用mysql_real_escape_string())。 我的回答将您的变量视为已准备好并已清理,因为您只想知道如何插入NULL值而不是您拥有的变量。

因为问题只是根据变量的值在查询中输入NULL值,所以我不认为这里详细讨论清理会是一个好主意。您可以在此处找到有关SQL注入以及如何在PHP中阻止它的更多详细信息:Best way to stop SQL Injection in PHP。祝好运! :)

答案 1 :(得分:3)

可能有更好的方法,但如果所有其他方法都失败了,您可以使用每个值执行此操作:

$val = isset($val) ? "'$val'" : "NULL";

然后将您的PHP查询字符串更改为:

insert into mytable set a=1, b=2, d1=$val, d2=$val2, d3=$val3

您应该考虑使用prepared statementsPDO而不是像这样构建查询字符串,尤其是在变量中涉及用户输入的情况下。

答案 2 :(得分:1)

最简单的方法是定义

function esc_null($src) {
    return $src === null ? 'NULL' : ("'" + mysql_real_string_escape($src) + "'");
}

"insert into mytable set a=1, b=2, d1=" . esc_null($val) . ", d2=" . esc_null($val2) . ", d3=" . esc_null($val3)

这也可以确保您的查询的完整性。

答案 3 :(得分:0)

我发现这是做我想做的最简单的方式:

INSERT INTO mytable SET a=1, b=2, d1=IF('$val' = '', NULL, '$val');