我正在纠结一些PHP/MySQL代码。我正在阅读一个表,修改一些字段,然后写入另一个表,如果插入没有任何React,当我想在数据库中插入空值时,其中一个数组值为空(允许字段为空值)。它看起来有点像这样:
$results = mysql_query("select * from mytable");
while ($row = mysql_fetch_assoc($results) {
mysql_query("insert into table2 (f1, f2) values ('{$row['string_field']}', {$row['null_field']});
}
不是每一行都有空值,在我的查询中,有更多的字段和2列可能为空,也可能不为空
3条答案
按热度按时间mum43rcc1#
在这个例子中,使用预准备语句确实为您节省了一些麻烦。
在MySQL中,为了插入空值,必须在
INSERT
时间指定它,或者忽略需要额外分支的字段:但是,如果要在该字段中插入值,现在必须对代码进行分支以添加单引号:
预准备语句会自动为您完成这些工作,它们知道
string(0) ""
和null
之间的区别,并适当地编写查询:它会为你转义你的字段,确保你不会忘记绑定一个参数。没有理由继续使用
mysql
扩展名。使用mysqli
,它会变成prepared statements。你会保存很多麻烦。n53p2ov02#
我认为您需要在
{$row['null_field']}
周围加上引号,因此'{$row['null_field']}'
如果你没有引号,你偶尔会得到一个插入语句,如下所示:
insert into table2 (f1, f2) values ('val1',)
,这是语法错误。如果这是一个数值字段,则必须在其上进行一些测试,如果null_field中没有值,则显式地将其设置为null。
laawzig23#
对于可接受
NULL
的字段,可以使用var_export($var, true)
输出string
、integer
或NULL
文本。请注意,不要用引号将输出括起来,因为引号会自动添加或省略。例如: