多个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的正确方法。 或者有没有更好的办法?
我建议使用参数化和绑定查询。 除了显而易见的好处之外,消除了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();
}
注意:您可能希望在此基本布局中添加一些错误检查