Я новичок в PHP. Я пытаюсь вставить большое количество элементов в базу данных. я использую for
петля и mysqli_query
команды.
Мой псевдокод выглядит примерно так:
for ($i=0; $i<50000; $i++) {
mysqli_query($con, "INSERT INTO users (name, age) VALUES ('$name','$age'); ") ;
}
Мой код работает несколько сотен циклов, а затем пуф: Фатальная ошибка: Максимальное время выполнения 30 секунд превышено в ххх в строке ххх
Для меня единственное решение — вручную увеличивать мой счетчик каждый раз после разрывов цикла.
Есть ли другое решение? Пожалуйста помоги!
Не делайте запрос для каждой записи по одному. Вы можете сделать несколько вставок с одним утверждением. Пример ниже делает 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 = '';
}
}
Бросить попробовать поймать
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
}
}
Наиболее полезным ответом стал комментарий Джея Бланшара:
Попробуйте
set_time_limit()
функция. призваниеset_time_limit(0)
будут
удалить любые временные ограничения для выполнения сценария.
Я вставил set_time_limit (0) в начале страницы, и мой скрипт PHP теперь работает отлично!