php - 使用 PDO 从多个数据源批量插入

标签 php mysql pdo

我正在尝试使用 PHP/PDO 从两个来源将行插入到 MySQL 表中,即:

  1. 另一个表(同一个数据库)
  2. 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  |
+-------+-----------+--------------+-----------+

其中,data1data2 取自另一个表,而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/

相关文章:

php - 禁用 Cookie 时不显示 session 数据

PHP imagefttext(imagettftext)不显示任何内容

php - 将自定义 MySQL 查询移至 PHP 中

mysql - 将两个查询与计数函数合并为一个结果集

php - 即使我知道参数的类型,我还需要准备语句吗?

php - PDO 没有绑定(bind) PostgreSQL 查询

php - 我的数据库中希腊字母之后的所有内容都是空的

php - 从 on.Change 函数刷新页面后重新加载 Ajax 内容

mysql - 需要 Symfony 1.4 Doctrine 模式帮助来解决违反完整性约束的问题

PHP PDO 错误消息作为变量发送到电子邮件中