PHP/MySQL 插入空值

2022-08-30 14:29:12

我正在为一些PHP / MySQL代码而苦苦挣扎。我正在从1个表中读取,更改一些字段然后写入另一个表,如果插入并且其中一个数组值为空,则没有任何反应,当我希望它在数据库中插入null时(该字段允许使用空值)。它看起来有点像这样:

$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列,这些字段和列可能是空的,也可能不是空的


答案 1

这是一个使用预准备语句确实为您节省一些麻烦的示例。

在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();

它为您转义字段,确保您不要忘记绑定参数。没有理由继续使用扩展。使用并改为预准备语句。你会为自己节省一个充满痛苦的世界。mysqlmysqli


答案 2

我认为你需要在你的周围加上引号,所以{$row['null_field']}'{$row['null_field']}'

如果您没有引号,则偶尔会得到一个如下所示的插入语句:这是一个语法错误。insert into table2 (f1, f2) values ('val1',)

如果这是一个数值字段,则必须在其上方进行一些测试,如果null_field中没有值,请将其显式设置为 null。


推荐