Bonjour.



J'ai un script PHP qui lit un fichier XLSX et qui l'ajoute dans la BDD. Pour l'instant, le seul message d'erreur que j'ai mis est "erreur SQL" si jamais il y a un problème sur la requête y compris l'insertion d'un doublon (ce qui peut porter à confusion).
Je voudrait donc mettre un message d'erreur énonçant les éléments déjà présents dans la BDD, mais je ne sais pas quelle est la meilleur façon de procéder.
Pour l'instant, j'ai ce code:

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
19
 
$requeteElements = $pdo->prepare('INSERT INTO Elements (...) VALUES(:...)');
$requeteSousElements = $pdo->prepare('INSERT INTO SousElements (...) VALUES(:...)');
 
$nbElements = count($listeElements);
for($i=0 ; $i<$nbElements ; $i++) {
    $cElem = $listeElements[$i][0];
    $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!");
 
    $nbSousElements = count($listeElements[$i]);
    for($j=0 ; $j<$nbSousElements ; $j++) {           
        $cSousElem = $listeElements[$i][$j];
        $return = $requeteSousElements -> execute(array(...)) ;
 
        if($return == FALSE) {
            break 2;
            }
        }
    }
Je pense qu'il n'y a pas le choix et qu'il faut passer par un "SELECT COUNT" sur chaque cElem et cSousElem (Est-ce correct? Ou existe-t-il une autre solution pour vérifier l'existence?)
Je fais donc 2 requête préparé pour tester les tester. Mais quel est le meilleurs endroit pour lancer la requête?

- Avant chaque exécution d'insertion puis je met une condition pour insérer si il l’élément n'existe pas ou pour ajouter le nom de l’élément si il est déjà présent?
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
19
20
 
 
$requeteElements = $pdo->prepare('INSERT INTO Elements (...) VALUES(:...)');
$requeteSousElements = $pdo->prepare('INSERT INTO SousElements (...) VALUES(:...)');
$requetVerifElements = $pdo->prepare('SELECT COUNT(...) FROM Elements WHERE nom=:nom');
$requetVerifSousElements = $pdo->prepare('SELECT COUNT(...) FROM SousElements WHERE nom=:nom');
 
$nbElements = count($listeElements);
for($i=0 ; $i<$nbElements ; $i++) {
    $cElem = $listeElements[$i][0];
    $requetVerifElements -> execute(array(:nom=>$cElem["nom"]))
    $returnVerif = $requetVerifElements->fetch();
 
    if(returnVerif == 0) {
        $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!");
        }
    else {
        //on met $cElem["nom"] on informe qu'il existe déjà
        }
    //On fait pareil pour les sous-elements.
- Ou au tout début je teste en une fois les Elements et les SousElement pour ensuite les séparer en une liste qui existe déjà et une liste à insérer. Mais dans ce cas, je rajoute 2 boucles for...
- Une autre solution ?

Est-ce que je suis à côté de la plaque concernant la méthode?