Page 1 sur 1

problème avec PDO

Posté : 07 janv. 2007, 19:29
par sacco
Bonjour,

le message d'erreur est
Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\journal\recup.php on line 40
Tous les dll sont bien là et les extention bien param dans php.ini
<?php
  //Pas de timeout;
  set_time_limit (0);

  $Log = file("BrightStor.log");
 
  //ouverture BD
  $sqldb = new PDO("mysql:host=localhost;dbname=test","root","")
or die ("impossible d'ouvrir bdd !");
  $query = "insert into journal
(JDate,JHeure,JInfo1,JInfo2,JInfo3,JInfo4,JInfo5,JInfo6,JInfo7,JInfo8,JInfo9
,JAction) values
(:JDate,:JHeure,:JInfo1,:JInfo2,:JInfo3,:JInfo4,:JInfo5,:JInfo6,:JInfo7,:JIn
fo8,:JInfo9,:JAction)";
  $stmt = $sqldb->prepare($query);

  foreach ($Log as $ligne)
    {
     $pos1 = strpos($ligne,"]");
     $entete = substr($ligne,1,$pos1-1);
     $JAction = substr($ligne,$pos1+2,strlen($ligne)-$pos1);
     list($par1,$par2) = explode(' ',$entete);
     list($JDate,$JHeure) = explode('-',$par1);
     list($m,$j,$a) = explode('/',$JDate);
     $JDate = $a.'-'.$m.'-'.$j;
     $par2 = substr($par2,1,strlen($par2)-1);
     List($i1,$i2,$i3,$i4,$i5,$i6,$i7,$i8,$i9) = explode(',',$par2);
     $stmt->bindParam(':JDate',$JDate);
     $stmt->bindParam(':JHeure',$JHeure);
     $stmt->bindParam(':JInfo1',$i1);
     $stmt->bindParam(':JInfo2',$i2);
     $stmt->bindParam(':JInfo3',$i3);
     $stmt->bindParam(':JInfo4',$i4);
     $stmt->bindParam(':JInfo5',$i5);
     $stmt->bindParam(':JInfo6',$i6);
     $stmt->bindParam(':JInfo7',$i7);
     $stmt->bindParam(':JInfo8',$i8);
     $stmt->bindParam(':JInfo9',$i9);
     $stmt->bindParam(':JAction',$JAction);
     $stmt->execute();
    }
  echo "chargement termine!";
?>
merci d'avance pour info[/code]

Posté : 07 janv. 2007, 19:34
par Cyrano
SI les valeurs envoyées sont de type autres que numériques, elles devraient être encadrées d'apostrophes, donc :

Code : Tout sélectionner

... VALUES (':JDate',':JHeure',':JInfo1',':JInfo2',... etc...
Dans un cas comme ça, fais toujours afficher ta requête, copie la et teste là directement dans un gestionnaire de base comme phpMyAdmin, tu sauras pourquoi ça ne fonctionne pas.

Posté : 07 janv. 2007, 19:42
par Xenon_54
SI les valeurs envoyées sont de type autres que numériques, elles devraient être encadrées d'apostrophes, donc :

Code : Tout sélectionner

... VALUES (':JDate',':JHeure',':JInfo1',':JInfo2',... etc...
Dans un cas comme ça, fais toujours afficher ta requête, copie la et teste là directement dans un gestionnaire de base comme phpMyAdmin, tu sauras pourquoi ça ne fonctionne pas.
Faux, elles ne doivent pas être entourées d'apostrophes.

Posté : 07 janv. 2007, 19:43
par sacco
Merci beaucoup ça marche

Posté : 07 janv. 2007, 19:49
par Xenon_54
Quelle version de PHP as-tu? Et quelle modification as-tu apportée?
Car il ne faut normalement pas mettre de ' autour des paramètres.

L'ajout de ce 3e paramètre à bindParam() aurait été approprié: PDO::PARAM_STR (dépendamment du type de variable)