PHP/MySQL 插入空值

标签 php mysql insert null

我正在为一些 PHP/MySQL 代码而苦苦挣扎。我正在从 1 个表中读取,更改一些字段然后写入另一个表,如果插入并且其中一个数组值为 null 时我希望它在数据库中插入 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 列可能为空,也可能不为空

最佳答案

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

在 MySQL 中,为了插入空值,您必须在 INSERT 时指定它,或者将需要额外分支的字段省略:

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

但是,如果您想在该字段中插入一个值,您现在必须分支您的代码以添加单引号:

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

Prepared statements 会自动为您执行此操作。他们知道 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();

它会为您转义字段,确保您不会忘记绑定(bind)参数。没有理由继续使用 mysql 扩展。使用 mysqli 它是 prepared statements反而。你会为自己拯救一个痛苦的世界。

关于PHP/MySQL 插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329542/

相关文章:

MySQL 不会插入文本,只会插入数字

mysql - MySQL 中的 `REPLACE` 和 `INSERT ... ON DUPLICATE KEY UPDATE` 之间有什么实际区别?

php - 从 ftp 递归下载所有 csv 文件

mysql - 使用或不使用 CONSTRAINT

java - Liquibase diff 使用表名的错误大小写生成变更集

mysql - 结果字段显示空白值的情况

php - 使用php将字符串转换为数组

php - 使用脚本插入产品的自定义选项

php - Doctrine ORM 中的类表继承

hibernate - 使 hibernate save() 和 update() 作为单个插入优化