Почему мой цикл PHP прерывается каждый раз?

Я новичок в PHP. Я пытаюсь вставить большое количество элементов в базу данных. я использую for петля и mysqli_query команды.

Мой псевдокод выглядит примерно так:

for ($i=0; $i<50000; $i++) {
mysqli_query($con, "INSERT INTO users (name, age) VALUES ('$name','$age'); ") ;

}

Мой код работает несколько сотен циклов, а затем пуф: Фатальная ошибка: Максимальное время выполнения 30 секунд превышено в ххх в строке ххх

Для меня единственное решение — вручную увеличивать мой счетчик каждый раз после разрывов цикла.

Есть ли другое решение? Пожалуйста помоги!

-1

Решение

Не делайте запрос для каждой записи по одному. Вы можете сделать несколько вставок с одним утверждением. Пример ниже делает 50 одновременно. Вы можете, вероятно, безопасно увеличить это до 100 или даже 500.

$counter = 0;
$query = 'INSERT INTO users (name, age) VALUES ';
for ($i=0; $i<50000; $i++) {
$counter++;
$sql .= "('$name','$age'),";
// execute query every 50 records
if ($counter % 50 === 0) {
$sql = rtrim($sql, ',');
mysqli_query($con, $query . $sql) ;
$sql = '';
}
}
5

Другие решения

Бросить попробовать поймать

for ($i=0; $i<50000; $i++) {
try {
mysqli_query($con, "INSERT INTO users (name, age) VALUES ('$name','$age'); ") ;
} catch ($e) {
// You can log $e here if you want
// It would also probably be good to print out your query
// so you can go back and try it again later
}

}
0

Наиболее полезным ответом стал комментарий Джея Бланшара:

Попробуйте set_time_limit() функция. призвание set_time_limit(0) будут
удалить любые временные ограничения для выполнения сценария.

Я вставил set_time_limit (0) в начале страницы, и мой скрипт PHP теперь работает отлично!

0
По вопросам рекламы [email protected]