我正在使用WordPress DB接口插入一些可为空的行值。
该函数: $wpdb->insert( $table, $data, $format );
获取$data参数中的值数组。 如果我从$data数组中排除某些字段值,则字段在表中显示为 null。 但是,我希望能够用所有字段的值填充$data数组,但在需要时将这些值设为 null。 但是,如果我传递的值 = NULL
,则数据库值不是空的,而是空白的。 我该怎么办?
查看 wpdb 源代码,"insert"方法最终被映射到 SQL,将每个字段值放在单引号之间(第 1233 行):
$sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`)
VALUES ('" . implode( "','", $formatted_fields ) . "')";
要插入真正的 NULL,您需要在该表达式中放置一个未经修饰的 NULL 单词,这是不允许的。因此,插入的是 4 个字母的字符串"NULL"。
请注意,此方法留给用户插入正确的数据类型,并依赖于MySQL自动将带引号的数字转换为实际数值。
看起来像以下作品:
而不是:
$nullable_value = NULL;
做:
$nullable_value = mysql_escape_string("NULL");
有关说明,请参阅此处和此处的线程答案。
编辑:
再看一眼,这在数据库中不起作用,因为@le dorfier 说......