2014-09-25 4 views
-1

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

Мой псевдо-код что-то вроде этого:

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

} 

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

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

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

+0

Проверьте, сколько записей есть и сколько математики нужно вставить? –

+7

Define ** poof ** пожалуйста? –

+2

(Совет) Не запрашивайте пока в цикле. Создайте запрос в цикле и выполните цикл. Это сделает 1 запрос, а не 50k. –

ответ

0

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

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

'mysqli_query()' не сигнализирует об ошибках, вам нужно использовать 'или die (mysqli_error ($ con))' после вызова. – Barmar

+0

Что такое 'catche'? Опечатка? –

+0

Да, это должно быть 'catch' –

5

Не сделать запрос для каждой записи одной за раз. Вы можете сделать несколько вложений с одним утверждением. Пример ниже составляет 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 = ''; 
    } 
} 
0

Самым полезным ответ был комментарий от Jay Blanchard:

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

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

Смежные вопросы