Bonjour,
J'ai environ 12000 lignes à insérer dans mysql mais ça peut être un nombre bien plus grand.

Actuellement, je fais un mysql_query par ligne donc ça fait 12000 mysql_query : ça fonctionne.
Je voudrais pouvoir améliorer les performances de mon script et essayer de faire moins de mysql_query pour voir si ça influe sur le temps que ça prend ou non. Mon idée est donc de grouper 5000 INSERT dans une variable $bigQuery et de faire un mysql_query quand le groupe est formé. Pour 12000 lignes, ça me ferait plus que 3 mysql_query, MySQL faisant le reste du boulot.

Pour faire cela, je procède comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$limit=0;
for($i=0; $i <= count($newCache); $i++)
{
    // reached the limit or no more entries ?
    if($limit >= $_CONFIG['max_queries'] || $i == count($newCache))
    {
        echo $bigQuery;
        mysql_query($bigQuery) or die("Query not good " . mysql_error());
 
        $bigQuery = NULL;
        $limit=0;
    }
    $bigQuery .= "INSERT INTO backup (path, md5sum, date) VALUES (\"" .
            $newCache[$i]['path'] . "\", \"" .
            $newCache[$i]['md5sum'] . "\", \"" .
            $newCache[$i]['date'] . "\"); ";
    $limit++;
}
$_CONFIG['max_queries'] vaut 5000. Si je fais cela, ça me sort
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/153to156.diff", "4d6' at line 1
En affichant le contenu de $bigQuery, j'ai ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/.htaccess", "bd429995aaded1ae1001be9d40189e21", "1220709777");
INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/153to156.diff", "4d6543b8cc73cf650587c8e9ea4e7e5a", "1220709777"); 
INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/CHANGELOG.php", "2b1df1667f3a17409227c54a0fafb46b", "1220709777");
... encore 4997 INSERT ...
je ne vois pas où est l'erreur. Pire encore, si je mets toutes les requêtes dans un fichier et que je l'importe directement dans mysql : ça marche (logique !). De même si j'importe dans phpmyadmin. J'ai essayé de mettre moins de requêtes d'un coup (seulement 1000) et ça ne fonctionne toujours pas. N'ayant pas accès à la fonction system, je ne peux pas utiliser de fichier sql : tout doit se faire tout seul sans que j'ai à intervenir.

D'où peut venir le problème ? Si ça n'apporte rien en terme de performances, je resterai avec les 12000 mysql_query