В настоящее время я пишу загрузчик php в мою базу данных mySQL.
Пользователь вводит user | password и пишет таблицу базы данных, в которую он хочет вставить, и выбирает регион из
Действие формы идет в 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();
}
Обратите внимание на привязку переменных ВНЕ цикл и привязка к фактическим переменным, а не к результатам вызовов trim ().
Кроме того, как написано, ваш код удаляет соединение с базой данных, используя ту же переменную для хранения вашего подготовленного оператора, что и само соединение db:
$db = $db->prepare(...);
будет уничтожать ваше соединение с БД, делая остальной код спорным.
Вы должны использовать do {} while ()
причина цикла, когда вы хотите вставить 600 вместо 500 $idx = 2
а также $idx * $batchSize = 1000 < 600
и выходит из цикла.