我在PHP脚本中有一些值,我必须在MySQL表中插入。以下是3个日期d1
,d2
和d3
。
我有这个默认语句将值插入数据库:
insert into mytable set a=1, b=2, d1='$val', d2='$val2', d3='$val3'
是否有一种非常简单的方法可以编写SQL语句以插入d1,d2和d3 NULL值而不是$val1
,$val2
和{{$val3
中的一个(或多个)日期1}}是零?无需处理新的PHP变量?
答案 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 statements和PDO
而不是像这样构建查询字符串,尤其是在变量中涉及用户输入的情况下。
答案 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');