Erreur sur une requête.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur sur une requête.

Re: Erreur sur une requête.

par ynx » 23 nov. 2023, 14:38

Tu devais déjà avoir l'erreur avec ce code en PHP 7 mais cette erreur était surement masquée (rapport d'erreur de PDO et/ou configuration de error_reporting).

Avant PHP 8, le rapport d'erreur par défaut de PDO était défini sur PDO::ERRMODE_SILENT qui n'arrête pas l'exécution du script.
Depuis PHP 8, le rapport d'erreur par défaut de PDO est PDO::ERRMODE_EXCEPTION qui déclenche une exception/erreur fatale.
https://www.php.net/manual/fr/pdo.error-handling.php

Re: Erreur sur une requête.

par Sq78 » 23 nov. 2023, 14:19

Ca fonctionne, je te remercie. Mais pourquoi cette requête fonctionnait en PHP 7.4 ? Ou se trouve l'incompatibilité avec PHP 8.0 ?

Re: Erreur sur une requête.

par ynx » 23 nov. 2023, 13:35

Bonjour,

Le message indique que le nombre de paramètre bindé à la requête ne correspond pas au nombre de marqueurs dans la requête : en effet, tu bind un marqueur ":groupe" qui n'existe pas dans ta requête sql.

Il ne faut surtout pas injecter une variable PHP dans une requête au risque d'avoir des injections sql.
Il faut utiliser correctement les marqueurs dans la requête :
$sql = $link->prepare("SELECT groupe, annee_article, libelle, en_ligne FROM bulletins_officiels WHERE groupe=:groupe AND en_ligne='1'");
$sql->bindParam(':groupe', $_GET['groupe'], PDO::PARAM_STR);
$sql->execute();

Erreur sur une requête.

par Sq78 » 23 nov. 2023, 13:11

Bonjour,

J'ai la requête suivante qui fonctionne parfaitement en PHP 7.4 mais me fait une erreur en PHP 8.0
Qui peut me dire où se trouve mon erreur svp ?

Code : Tout sélectionner

$sql = $link->prepare("SELECT groupe, annee_article, libelle, en_ligne FROM bulletins_officiels WHERE groupe='".$_GET['groupe']."' AND en_ligne='1'"); $sql->bindParam(':groupe', $_GET['groupe'], PDO::PARAM_STR); $sql->execute(); while ($data=$sql->fetch()){ echo "<div class='menu-bo'><a href='bulletin-municipal.php?annee=".$data['annee_article']."&libelle=".$data['libelle']."' target='_self'>".$data['annee_article']."</a></div>"; }
Et voici l'erreur sous PHP 8.0

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\la-machine\mairie\lirebm.php on line 9

La ligne 9 est : $sql->execute();

PS : $_GET['groupe'] vient de la page précédente et est bien renseigné.

Merci par avance pour votre aide