我正在尝试使用 PHP/PDO 从两个来源将行插入到 MySQL 表中,即:
- 另一个表(同一个数据库)
- PHP
我正在填写的表格如下所示:
Table Name : data_sink
+-------+-----------+--------------+-----------+
| ID | data1 | data2 | data3 |
+-------+-----------+--------------+-----------+
| 1 | text_1 | aa | 8 |
| 2 | text_2 | bb | 8 |
| 3 | text_3 | cc | 8 |
| 4 | text_4 | dd | 8 |
| 5 | text_5 | ee | 8 |
| 6 | text_6 | ff | 8 |
+-------+-----------+--------------+-----------+
其中,data1 和data2 取自另一个表,而data3 来自PHP 代码。我使用以下查询仅从表中获取数据:
$insert_rows = $db->prepare("INSERT INTO data_sink (data1, data2)
SELECT username, usergroup FROM data_origins WHERE <condition>");
我不确定如何将 data3 添加到此查询中。我找到了解决方法,方法是向我的原始表添加另一列,并用值“replaceme”填充所有行,然后按如下方式运行查询:
$insert_rows = $db->prepare("INSERT INTO data_sink (data1, data2, data3)
SELECT username, usergroup, temp_value FROM data_origins WHERE <condition>");
然后我运行一个额外的查询,在 data3 设置为“replaceme”的地方更新表
$update_rows = $db->prepare("UPDATE data_sink SET data3 = :data3
WHERE data3 = 'replaceme'");
是否有解决此问题的单一步骤方法,以组合来自 MySQL 和 PHP 的输入? [注意:对于每批插入,所有行共享 data3 的公共(public)值]
最佳答案
可以很简单
$insert_rows = $db->prepare("INSERT INTO data_sink (data1, data2, data3)
SELECT username, usergroup, ? FROM data_origins WHERE <condition>");
$insert_rows->bindParam(1, $data3);
$insert_rows->execute();
当然,这假定您的 $data3 对于要插入的所有行都是相同的。也可以进行简单的算术运算或函数调用,以确保每一行根据 $data3 获得不同的值
关于php - 使用 PDO 从多个数据源批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971969/