提问者:小点点

PHP-在mysql中从具有一致列的多个CSV文件中插入多行


多个CSV文件具有一致的26列标题。 我使用普通PHP在MySQL中插入数据。 数据可能包含>; 10万行。

下面是我的示例CSV文件。

下面是我的代码:

while(($line = fgetcsv($csvFile)) !== FALSE){
    //to get the data from csv
    $account_code = $line[0];
    $caller_number = $line[1];
    $callee_number = $line[2];
  .
  .
  .

    $action_type=$line[23];
    $source_trunk_name=$line[24];
    $dest_trunk_name =$line[25];

    $query = $db->query("INSERT INTO `cdrnew`
                (`account_code`, `caller_number`, `callee_number`, ...........,`action_type`, `source_trunk_name`, `dest_trunk_name`)
            VALUES ('".$account_code."','".$caller_number."', '".$callee_number."', ............,'".$action_type."','".$source_trunk_name."','".$dest_trunk_name."')");

如果我在所有CSV文件中都有一致的26列标题,那么这是否是将数据从CSV插入到MySQL的正确方法。 或者有没有更好的办法?


共1个答案

匿名用户

我建议使用参数化和绑定查询。 除了显而易见的好处之外,消除了SQL注入的可能性,您可以编译一次查询,但每次使用新参数运行多次。 这样,数据库就不必进行1000次查询编译,因此也不必往返服务器1000次。

首先将查询移到循环之外,并在那里准备它

$stmt = $db->prepare("INSERT INTO `cdrnew`
                (`account_code`, `caller_number`, `callee_number`, 
                .,.,.,.,.,.,
                `action_type`, `source_trunk_name`, `dest_trunk_name`)
            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

while(($line = fgetcsv($csvFile)) !== FALSE){

    $stmt->bind_param('ssssssssssssssssssssssssss',
                        $line[0], $line[1], $line[2], $line[3], $line[4],
                        $line[5], $line[6], $line[7], $line[8], $line[9],
                        $line[10], $line[11], $line[12], $line[13], $line[14],
                        $line[15], $line[16], $line[17], $line[18], $line[19],
                        $line[20], $line[21], $line[22], $line[23], $line[24],
                        $line[25]
        );
    $stmt->execute();
}

注意:您可能希望在此基本布局中添加一些错误检查