PHP/MySQL插入空值

fcg9iug3  于 2023-03-11  发布在  PHP
关注(0)|答案(3)|浏览(172)

我正在纠结一些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列可能为空,也可能不为空

mum43rcc

mum43rcc1#

在这个例子中,使用预准备语句确实为您节省了一些麻烦。
在MySQL中,为了插入空值,必须在INSERT时间指定它,或者忽略需要额外分支的字段:

INSERT INTO table2 (f1, f2)
  VALUES ('String Value', NULL);

但是,如果要在该字段中插入值,现在必须对代码进行分支以添加单引号:

INSERT INTO table2 (f1, f2)
  VALUES ('String Value', 'String Value');

预准备语句会自动为您完成这些工作,它们知道string(0) ""null之间的区别,并适当地编写查询:

$stmt = $mysqli->prepare("INSERT INTO table2 (f1, f2) VALUES (?, ?)");
$stmt->bind_param('ss', $field1, $field2);

$field1 = "String Value";
$field2 = null;

$stmt->execute();

它会为你转义你的字段,确保你不会忘记绑定一个参数。没有理由继续使用mysql扩展名。使用mysqli,它会变成prepared statements。你会保存很多麻烦。

n53p2ov0

n53p2ov02#

我认为您需要在{$row['null_field']}周围加上引号,因此'{$row['null_field']}'
如果你没有引号,你偶尔会得到一个插入语句,如下所示:insert into table2 (f1, f2) values ('val1',),这是语法错误。
如果这是一个数值字段,则必须在其上进行一些测试,如果null_field中没有值,则显式地将其设置为null。

laawzig2

laawzig23#

对于可接受NULL的字段,可以使用var_export($var, true)输出stringintegerNULL文本。请注意,不要用引号将输出括起来,因为引号会自动添加或省略。
例如:

mysql_query("insert into table2 (f1, f2) values ('{$row['string_field']}', ".var_export($row['null_field'], true).")");

相关问题