gpt4 book ai didi

php - 重写代码以使用 PDO,并提高多次插入的效率

转载 作者:行者123 更新时间:2023-11-29 13:59:47 24 4
gpt4 key购买 nike

我有以下代码,我希望能够更有效地执行对数据库的插入,并更新代码以现在使用 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 数据库连接。

最佳答案

用最简单的代码来做到这一点:

// 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

关于php - 重写代码以使用 PDO,并提高多次插入的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15263481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com