我有以下代码,我希望在执行插入数据库时更高效,并且还要更新代码以使用PDO:
foreach ($urls as $i => $url) {
//path to csv file
$web = "http://path-to-file/".$url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt ($ch, CURLOPT_URL, $web);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
$result = curl_exec($ch);
//explode the csv file by new line
$r = explode("\n", $result);
$sql = "insert into product (`product_name`) values ";
for ($i = 1; $i <= count($r); $i++){
//explode each row by comma
$n = explode(",", $r[$i]);
$product_name = $n[0];
$sql .= "('$product_name'),";
}
$sql = trim($sql, ",");
if(count($n) != 0)
mysql_query($sql);
}
首先,有一个循环,检索远程文件中的数据,并将所有这些数据从文件中插入数据库。目前,代码从一个文件插入数据,然后转到下一个文件。每个文件最多可以有2000个插入,通常分批完成15个(因此插入的粗略记录总数为30000)。在一次命中或批量插入所有30000条记录时,数据库的效率会更高吗? (请记住,网站上可能有多个用户也在检索文件和执行插入操作。)
其次我想修改上面的代码来使用PDO。
对此有任何帮助将不胜感激。
由于
PS。我知道如何创建PDO数据库连接。
答案 0 :(得分:1)
用最简单的代码来做:
// Start PDO connection (DataBaseHandler)
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO('mysql:host=localhost;dbname=database', $user, $password);
// Prepare a reusable insert statement and bind the variable
$insert = $dbh->prepare("INSERT INTO product (`product_name`) VALUES (:product_name)");
$insert->bindParam(':product_name',$product_name);
// Use foreach for arrays
foreach($r as $row){
//explode each row by comma
$n = explode(",", $row);
$product_name = $n[0];
// Execute the prepared INSERT statement referring to the current product name
$insert->execute();
}
不确定在一个语句中执行### INSERTS是否比执行###单独的INSERT语句更快,但是由于PDO预处理语句,这段代码肯定更简单有效: http://www.php.net/manual/en/pdo.prepare.php
修改强>
根据this answer,做一个大查询要快得多。我希望我开始使用PDO和准备好的语句,但是通过这样做你学得最好,我将由你来创建新的PDO查询。这可能会让您入门:https://stackoverflow.com/a/6235710/703229