Php 使用PDO从多个数据源大容量插入

Php 使用PDO从多个数据源大容量插入,php,mysql,pdo,Php,Mysql,Pdo,我尝试使用PHP/PDO从两个来源将行插入MySQL表,即: 另一个表(同一数据库) PHP 我正在填充的表如下所示: Table Name : data_sink +-------+-----------+--------------+-----------+ | ID | data1 | data2 | data3 | +-------+-----------+--------------+-----------+ | 1 | text_

我尝试使用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  |
    +-------+-----------+--------------+-----------+
    
    其中,data1data2取自另一个表,而data3来自PHP代码。我使用以下查询仅从表中获取数据:

    $insert_rows = $db->prepare("INSERT INTO data_sink (data1, data2)
    SELECT username, usergroup FROM data_origins WHERE <condition>");
    
    有没有一种单步解决这个问题的方法,将MySQL和PHP的输入结合起来?[注意:对于每一批插入,所有行都共享一个共同的数据值3]

    可以像

    $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();
    
    $insert\u rows=$db->prepare(“插入到数据接收器(数据1、数据2、数据3))
    从数据中选择用户名、用户组,其中“);
    $insert_rows->bindParam(1,$data3);
    $insert_rows->execute();
    

    当然,这假设您的$data3对于插入的所有行都是相同的。也可以执行简单的算术运算或函数调用,以确保每一行基于$data3获得不同的值

    是否查看了一次更新多行的运算符?这对我没有帮助,我在选择要更新的行时没有问题,我只是在将一个参数从PHP传递到mysql查询时遇到了一个问题:)不过,选择的答案是有效的!
        $update_rows = $db->prepare("UPDATE data_sink SET data3 = :data3 
    WHERE data3 = 'replaceme'");
    
    $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();