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

PHPのさまざまなテーブルに個々のCSV行をアップロードするにはどうすればよいですか?

    あなたの場合、最良の解決策は最も単純なものであるため、5つのクエリを作成するだけで、ループ内でそれを実行することもできます。

    $pdo = new PDO("mysql:host=127.0.0.1;dbname=yourdbname;charset=utf8", "username", "password");
    
    if (($handle = fopen("test.csv", "r")) !== FALSE) {
        $row = 1;
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            if ($row == 1) {
                $row++;
                continue;
            }
            $row++;
    
            foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
                $stmt = $pdo->prepare("INSERT INTO $table (name, title) VALUES (?,?)");
                $stmt->execute([$data[0], $data[1]]);
            }
        }
        fclose($handle);
    }
    

    または、UIDを使用したUPDATEの場合は、フォアチを置き換えます:

    foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
        $stmt = $pdo->prepare("UPDATE $table SET name=?, title=? WHERE uid=?");
        $stmt->execute([$data[0], $data[1], $uid]);
    }
    

    または、INSERTまたはUPDATEを使用すると、この場合は名前付きパラメーターを使用していることに注意してください。

    foreach (['table1', 'table2', 'table3', 'table4', 'table5'] as $table) {
        $stmt = $pdo->prepare("INSERT INTO $table (uid, name, title) 
            VALUES (:uid, :name, :title) 
            ON DUPLICATE KEY UPDATE name=:name, title=:title");
        $stmt->bindValue('uid', $uid);
        $stmt->bindValue('name', $data[0]);
        $stmt->bindValue('title', $data[1]);
        $stmt->execute();
    }
    

    table1のSQL .. table5

    CREATE TABLE table1 (
     uid int(11) NOT NULL AUTO_INCREMENT,
     name varchar(255) NOT NULL,
     title varchar(255) NOT NULL,
     PRIMARY KEY (uid)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
    

    注: 独自性をどのように維持したいかをよりよく説明するときは、おそらく他のソリューションをいくつか追加します。現時点では、CSVのチーフであるJamesがDBのチーフであるJamesと同じであるかどうかはコードにはわかりません。




    1. 文字列値1、2をOracleクエリへの入力として渡すことができません

    2. MySQLレプリケーションのためのマルチクラウド展開

    3. TRY_CONVERT()がSQLServerでどのように機能するか

    4. MySQLへの最大同時接続