gpt4 book ai didi

PHP、MYSQl 将一个数据库表复制到其他数据库表并用空替换为空

转载 作者:搜寻专家 更新时间:2023-10-30 22:35:19 25 4
gpt4 key购买 nike

我正在将一个完整的数据库复制到另一个数据库。除一个问题外,一切正常。假设我的一张表具有以下结构

 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)

任何人都可以告诉我如何在我的场景中实现这一目标。

最佳答案

这可以通过一个查询轻松完成:

INSERT INTO newtable (newfield1, newfield2, etc...)
SELECT oldfield1, IF(oldfield2="", NULL, oldfield2), etc...
FROM oldtable

select 可以即时更正/调整任何字段值。

请注意,您的版本容易受到 sql injection attacks 的攻击.您正在处理的数据在几毫秒之前从数据库中出来并不重要 - 它仍然是未引用/未转义的数据,并且可以/将会破坏您的插入查询。

关于PHP、MYSQl 将一个数据库表复制到其他数据库表并用空替换为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com