Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL插入空值_Php_Mysql_Insert_Null - Fatal编程技术网

PHP/MySQL插入空值

PHP/MySQL插入空值,php,mysql,insert,null,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

我正在努力编写一些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列,它们可能是空的,也可能不是空的

我想你需要在
{$row['null\u field']}
周围加引号,所以
'{$row['null\u field']}

如果没有引号,有时会出现如下insert语句:
insert into table2(f1,f2)values('val1',)
,这是一个语法错误


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

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

在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
。您将为自己省去一片痛苦。

对于可以接受
NULL
的字段,您可以使用
var\u export($var,true)
输出
字符串
整数
NULL
文本。请注意,您不会用引号括住输出,因为它们将自动添加或省略

例如:

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

谢谢,我必须添加一些额外的测试并显式设置null,在应用程序中,字段为null比空字符串更符合逻辑。不幸的是,如果要插入的值为null,引用字段将是不正确的。不能在一个字符串中完成整个语句;将需要类似于
mysql\u查询(“插入到表2(f1,f2)值(“{$row['string\u field']}”),”(is\u null($row['null\u field']]),“null”,“{$row['null\u field']}”),“
这可以通过创建一个帮助函数
函数quotedValueOrNull($value){return(is\null($value),“null”,“,“{$value}”)来更容易阅读
@MattP:请注意,PDO具有相同的行为。在确定一个API之前,请比较每个API(PDO更易于使用,并且基本上与数据库无关,mysqli提供了对MySQL API更直接的访问)。