sql >> データベース >  >> RDS >> Mysql

PHP PDO MYSQLに複数の行を挿入するための最良の方法は何ですか?

    少なくとも次の2つのオプションがあります:

    $rows = [(1,2,3), (4,5,6), (7,8,9) ... ];
    
    $sql = "insert into `table_name` (col1, col2, col3) values (?,?,?)";
    
    $stmt = $db->prepare($sql);
    
    foreach($rows as $row)
    {
        $stmt->execute($row);
    }
    
    OR:
    
    $rows = [(1,2,3), (4,5,6), (7,8,9) ... ];
    
    $sql = "insert into `table_name` (col1, col2, col3) values ";
    
    $paramArray = array();
    
    $sqlArray = array();
    
    foreach($rows as $row)
    {
        $sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';
    
        foreach($row as $element)
        {
            $paramArray[] = $element;
        }
    }
    
    // $sqlArray will look like: ["(?,?,?)", "(?,?,?)", ... ]
    
    // Your $paramArray will basically be a flattened version of $rows.
    
    $sql .= implode(',', $sqlArray);
    
    $stmt = $db->prepare($sql);
    
    $stmt->execute($paramArray);
    

    ご覧のとおり、最初のバージョンははるかに単純なコードを備えています。ただし、2番目のバージョンはバッチ挿入を実行します。バッチ挿入の方が速いはずですが、 @BillKarwinに同意します パフォーマンスの違いは、ほとんどの実装で気付かれることはありません。



    1. トラブルシューティング`phpapp / console doctrine:schema:create`を実行しているときにそのようなファイルやディレクトリはありません

    2. 別のSELECTの値に基づいてSELECTする方法

    3. PostgreSQLのスペースの計算と節約

    4. MySQLのinformation_schemaデータベースに関する情報