2010-04-16 9 views
0

J'ai un dossier/tableau d'images, il peut être 1, maximum de 12. Ce que je dois faire est de les ajouter dynamiquement de sorte que les images sont ajoutées à une table d'images.insert dynamique PHP mysql et la performance

Au moment j'ai

$directory = "portfolio_images/$id/Thumbs/"; 
$images = glob("" . $directory . "*.jpg"); 

    for ($i= 0; $i <= count($images); $i += 1) { 

mysql_query("INSERT INTO project_images (image_name, project_id)VALUES ('$images[0]', '$id')") or die(mysql_error()); 

} 

cela est bien beau, mais il ne se sent pas bien, comment est-ce pour la performance? Y a-t-il un meilleur moyen?

Le nombre maximum d'images est que jamais va être 12.

Répondre

3

Avec cette solution, vous envoyez jusqu'à 12 requêtes d'insertion à la base de données - ce qui signifie jusqu'à 12 appels entre PHP et MySQL.

Un moyen peut-être plus rapide serait d'envoyer une seule requête SQL, qui insérerait plusieurs lignes à la fois.

Cette requête SQL ressemblerait à ceci:

INSERT INTO project_images (image_name, project_id) 
VALUES ('image name 1', 'id_1'), 
('image name 2', 'id_2'), 
('image name 3', 'id_3'), 
('image name 4', 'id_4') 

Voir 12.2.5. INSERT Syntax dans le manuel de MySQL - il y a un exemple d'une telle requête. Cela signifie que vous pouvez d'abord modifier votre code pour créer cette requête; et seulement ensuite, appelez MySQL une fois.

Non testé, mais je suppose que votre pourrait regarderait un peu comme ceci:

$values = array(); 
$directory = "portfolio_images/$id/Thumbs/"; 
$images = glob("" . $directory . "*.jpg"); 
for ($i= 0; $i <= count($images); $i += 1) { 
    $values[] = "('$images[0]', '$id')"; 
} 

$values_str = implode(', ', $value); 
mysql_query("INSERT INTO project_images (image_name, project_id) VALUES $values_str") or die(mysql_error()); 
1
  1. Vous avez une erreur dans votre code. Non $ images [0] mais $images[$i]
  2. Votre code ne respecte pas la bonne syntaxe SQL. $images[$i]=mysql_real_escape_string($images[$i]) doit être ajouté

  3. Oui, il peut se faire d'une autre manière que Pascal mentionné

  4. Non, il n'y a pas de problème de performance.
  5. L'utilisation or die() est terrible pratique, utilisez or trigger_error() pour gérer un message d'erreur et et un modèle pour la notification utilisateur