PHP / MySQL插入空值

时间:2011-03-16 17:52:56

标签: php mysql insert null

我正在努力学习一些PHP / MySQL代码。我正在读取1个表,更改一些字段然后写入另一个表,如果插入时没有任何反应,并且当我希望它在数据库中插入null时,其中一个数组值为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列可能为空,也可能不为空

3 个答案:

答案 0 :(得分:56)

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

在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扩展名。请改用mysqliprepared statements。你会为自己拯救一个痛苦的世界。

答案 1 :(得分:5)

我认为您需要围绕{$row['null_field']}引用,因此'{$row['null_field']}'

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

如果这是一个数字字段,你必须在它上面进行一些测试,如果null_field中没有值,则显式设置为null ..

答案 2 :(得分:4)

对于NULL可接受的字段,您可以使用var_export($var, true)输出stringintegerNULL字面值。请注意,您不会使用引号括起输出,因为它们将自动添加或省略。

例如:

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