【发布时间】:2016-07-13 15:08:26
【问题描述】:
我正在将一个完整的数据库复制到另一个数据库。除了一个问题,一切都在工作。假设我的一张桌子具有以下结构
id -> Integer PK AI
state_id -> Integer (Default NULL)
sell_id -> Integer (Default NULL)
现在这个表的 state_id 和 sell_id 可以有 NULL。因此,我向该表查询 SELECT,针对所有 NULL 值返回一个空字符串。但是当我尝试将这些值插入其他数据库表时,它会生成错误,因为整数列中不能给出空字符串。就像选择查询返回数据一样,比如下面的数组
array(
'id' => 1,
'state_id' => '',
'sell_id' => ''
)
所以我会尝试将此数组插入到新表中,它会产生错误。所以我想用NULL替换所有''。我尝试通过将 NULL 设置为所有空值来跟踪
$array = array_map(function($v){
return $v == '' ? NULL : $v;
},$array);
但这也会将'' 打印到所有NULL 值。这是我的完整代码
$result = mysqli_query($dbConnection1, "SELECT * FROM $table ORDER BY $sortedBy DESC limit $noOfRecords");
$columns = '';
$values = '';
if($result && mysqli_num_rows($result)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
$array = array_values($row);
$array = array_map(function($v){
return $v == '' ? NULL : $v;
},$array);
$columns = " (".implode(", ",array_keys($row)).") ";
$values .= " ('".implode("', '",$array)."'),";
}
$values = rtrim($values, ",");
mysqli_query($dbConnection2, "INSERT INTO $table $columns VALUES $values");
}
但此代码不适用于上述情况。插入查询打印为
INSERT INTO table (id, state_id, sell_id) VALUES (1, '', '') , (2, '', '')
但我希望它像
INSERT INTO table (id, state_id, sell_id) VALUES (1, NULL, NULL) , (2, NULL, NULL)
任何机构都可以告诉我如何在我的场景中实现这一目标。
【问题讨论】: