gpt4 book ai didi

PHP插入大量值问题

转载 作者:行者123 更新时间:2023-11-29 12:26:10 27 4
gpt4 key购买 nike

我目前正在向我的 mySQL 数据库编写一个 php 加载器。用户输入用户|密码并写入自己要插入的数据库表,并从中选择一个区域

表单操作转到database.php以使用POST进行插入

我在database.php中的代码是:

$region = $_POST["region"];
$tablename = $_POST["tableName"];

$accounts = explode(PHP_EOL, $_POST["accountlist"]);

$quantity = sizeof($accounts);
// Batch size, calc iterations
$batchSize = 500;

for($idx=0;$idx*$batchSize < $quantity; $idx++){
$accountsPartial = array_slice($accounts, $idx*$batchSize, $batchSize);

// Prepare the Query
$query = "INSERT INTO $tablename (username, password, region) VALUES (?, ?, ?)";
// Create the multiple value placeholder
$db = $db->prepare($query);


foreach($accountsPartial as $item){
$i = 1;
list($user, $pass) = explode("|", $item);
$db->bindValue($i++, trim($user));
$db->bindValue($i++, trim($pass));
$db->bindValue($i++, trim(strtoupper($region)));
$db->execute();
}
}

我的问题是,当我发送超过 500 个值时,只有 500 个帐户被插入。我很想获得一些如何解决此问题的帮助和建议提前致谢!

最佳答案

你的循环代码基本上没有用。由于您想要插入 POST 中的所有数据,因此您应该这样做:

$query = "INSERT INTO $tablename (username, password, region) VALUES (?, ?, ?)";
// Create the multiple value placeholder
$stmt = $db->prepare($query);
$stmt->bindValue(1, $user);
$stmt->bindValue(2, $pass);
$stmt->bindValue(3, $region)

$region = trim(strtoupper($region));

foreach($accountsPartial as $item){
list($user, $pass) = explode("|", $item);
$user = trim($user);
$pass = trim($pass);

$stmt->execute();
}

注意变量在循环外部的绑定(bind),以及绑定(bind)到实际变量,而不是trim() 调用的结果。

此外,正如所写,您的代码正在删除数据库连接,方法是使用与数据库连接本身相同的变量来保存准备好的语句:

$db = $db->prepare(...);

将破坏您的数据库连接,使其余代码变得毫无意义。

关于PHP插入大量值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280598/

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