Insertion multiple

Fermé
gnaoule Messages postés 24 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 22 décembre 2021 - Modifié le 10 nov. 2020 à 12:27
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 - 10 nov. 2020 à 12:33
Bonjour,
Je suis entrain de faire un script en php qui permet de l'insertion de plus de 1000 enregistrements dans une table. En local le script marche normalement (tous les essais passe bien). mais sur le serveur ; le premier essai passe normalement ,mais quand j'essai un second 20 seconde après
Le serveur se plante et affiche une erreur :
Fatal error: Call to a member function rowCount() on boolean in /htdocs/bestschool.eglisia.com/sd/personnes/app-list.php on line 19

Voici le code php :

<?php 
error_reporting(1);
session_start();
 include("../../db/db.php");
 include("../../db/conx.php");
 include("../../funct/code.php"); 
 //include("../../funct/note.php"); 
 include("../../funct/sms.php");
 include("../../funct/effectif.php");  
 include("../../config/conf.php");

   
 if($_SESSION['it'] <= sizeof($_SESSION['_APTAB'])){ 
     $i = 1;
     for($a = ($_SESSION['it']) ? $_SESSION['it'] : 0; $a < sizeof($_SESSION['_APTAB']); $a++){  
         $tab = explode("*",$_SESSION['_APTAB'][$a]);
  if($link->query("SELECT * FROM note_bulmat WHERE AP_mle='".$tab[0]."' AND matiere_ID='".$tab[1]."' AND classe_ID='".$tab[2]."' AND per_id='".$tab[3]."' ")->rowCount()===0){ 
    
     $rek = $link -> exec("INSERT INTO note_bulmat VALUES(
     'NULL',
     '".$tab[0]."',
     '".$tab[1]."',
     '".$tab[2]."',
     '".$tab[3]."',
     '".$tab[4]."',
     '',   
     '".$tab[5]."',
     '".date("Y-m-d H:i:s",time())."',
     '',
     '".$_COOKIE['LOGIN']."')"); 

          $_SESSION['CC'] += 1;
            if($i == 100  ) break; 
      $i++;
      
       }else{
       
       $link->exec("UPDATE note_bulmat SET moyenne='".$tab[4]."', updated='".date("Y-m-d H:i:s",time())."', rang='' WHERE AP_mle='".$tab[0]."' AND matiere_ID='".$tab[1]."' AND classe_ID='".$tab[2]."' AND per_id='".$tab[3]."'");
          $_SESSION['CC'] += 1;
            if($i == 100  ) break; 
      $i++;
       }
       
       }
  
          header("refresh:10; url=eva-cmp2.php");
         $_SESSION['it'] += 100; 
    }


if($_SESSION['it'] >= sizeof($_SESSION["_APTAB"]) ){
  $_SESSION['CC'] = 0;
  $_SESSION['it'] = 0;
  $_SESSION['_CC'] = 0; 
  header("refresh:5; url='eva-cmp3.php'"); 
  }     

?>

Je vous remercie d'avance pour votre aide

EDIT: Ajout du LANGAGE dans les balises de code pour avoir la coloration syntaxique

1 réponse

jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
10 nov. 2020 à 12:33
Bonjour,

Pour commencer, pense, lorsque tu postes du code, à préciser le LANGAGE dans les balises de code.
Explications à lire ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite,
Evites de trop chainer tes fonctions...
C'est moins facile à debuguer.
Donc, réécris le code de la ligne
  if($link->query("SELECT * FROM note_bulmat WHERE AP_mle='".$tab[0]."' AND matiere_ID='".$tab[1]."' AND classe_ID='".$tab[2]."' AND per_id='".$tab[3]."' ")->rowCount()===0){ 
   

par exemple comme ceci
  $sql = "SELECT * 
          FROM note_bulmat 
          WHERE AP_mle='".$tab[0]."' 
          AND matiere_ID='".$tab[1]."' 
          AND classe_ID='".$tab[2]."' 
          AND per_id='".$tab[3]."'";
  $res = $link->query($sq);
  if(!$res){
    echo "Erreur dans la requête " . $sql;
    exit;
  }
  
  if($res->rowCount()===0){



0