gpt4 book ai didi

php - MySQLi 如果值不存在则插入

转载 作者:行者123 更新时间:2023-11-29 08:07:27 25 4
gpt4 key购买 nike

编辑:我忘了提及,如果新数据库中已存在具有相同列值的行,则我的脚本不应输入,这就是我在提到“重复条目”时的意思,尽管没有共同的 PK .

这是我的困境,我正在使用 MySQLi 将数据从旧表迁移到具有不同设计的新表中,我希望我的程序能够运行多次,而无需乘以以前的条目。我最初的方法是对每个插入的元素进行验证查询:

//foreach elt of old table:
$a = $old_table['a'];
$b = $old_table['b'];
$query = $db->query("SELECT `id` FROM `old_table`
WHERE `a` = '$b'
AND `b` LIKE '$b'")->fetch_assoc();
if ($query == null) {
//insert a row into the new table
}

这种方法的问题在于运行时间非常可怕,我通过使用数据库事务设法大大减少了它:

$query = $db->prepare("INSERT INTO  `new_table` 
(`a`, `b`, `c`, `d`, `e`)
VALUES (?, ?, ?, ?, ?)");
$query->bind_param('isssi', $a, $b, $c, $d, $e);
$db->query("START TRANSACTION");
foreach ($old_table as $old_row) {
$a = $old_row['a'];
...
$e = $old_row['e'];
$query->execute();
}
$query->close();
$db->query("COMMIT");

此方法的问题是,如果程序多次运行,则会产生多个条目。需要注意的是,由于两个表的设计不同,因此没有共同的主键,因此我认为我不能使用 DUPLICATE KEY。

想法?

最佳答案

其实你已经解决了问题,只是由于某种原因中途停了下来。

The problem with this method is that the run-time was horrendous and I managed to considerably cut it down by using a database transaction

我想知道你为什么不将 select 也包含到事务中。

Thoughts?

只需添加您在第一个变体中运行的选择查询即可。仅此而已。

关于php - MySQLi 如果值不存在则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415161/

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