2010-07-09 6 views
2

Ok, donc j'aide quelqu'un avec son site. Leur codeur original a pensé que ce serait une bonne idée de mettre toute leur base de données dans un tableau. Je parcourt chaque élément de la table et je l'insère dans une nouvelle table mysql que j'ai créée. Les lignes sont bien insérées mais le problème est que php ne laisse pas mon script s'exécuter pendant plus de 60 secondes.Conversion d'un tableau avec plus de 50 000 entrées dans une base de données mysql

Comment puis-je remplacer ce paramètre?

Répondre

4

Il y a la solution classique, en utilisant set_time_limit(), qui vous permet de définir la durée d'exécution maximale (en secondes) pour un script. Toutefois, vous pouvez toujours insérer plusieurs lignes avec une requête ou convertir le tableau en CSV et utiliser LOAD DATA, ce qui est beaucoup plus rapide.

Modifier: exemples

: insertion de plusieurs lignes

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

Ref: http://dev.mysql.com/doc/refman/5.1/en/insert.html

Utilisation LOAD DATA:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table; 

Ref: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

2

Vous pouvez utiliser la fonction set_time_limit() en haut de la page, comme suit:

set_time_limit(0); 
0

Essayez ini_set('max_execution_time', $time_in_seconds);

Source

4

Solutions:

  • Set max_execution_time-0 dans le php.ini ou utiliser set_time_limit()

  • Exécutez le script PHP à la ligne de commande . La limite de temps pour les scripts CLI est codée en dur à 0 déjà.

  • Videz le tableau dans un fichier CSV, puis utilisez LOAD DATA INFILE pour que l'importation de la base de données soit 20 fois plus rapide que l'insertion d'une ligne à la fois dans une boucle.

0

Si vous utilisez mysqli j'utiliser multi_query pour les opérations par lots. Le tout fonctionnera beaucoup plus vite.

Questions connexes