8795 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous, je rencontre un problème avec une requête.

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /homez.666/nom/www/page.php on line 208


qui correspond à cette ligne

$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));


je n'arrive pas à mettre en pièce jointe l'imprime écran de ma base de donnée.
J'ai une colonne nommée "saison" avec plusieurs possibilités de variables : printemps, été, automne, hiver et j'ai également des colonnes nommées et remplies par leurs noms : printemps, été, automne, hiver. désolé ça aurait été plus clair avec l'image.

Mon code d'origine

<?php 

// Déclaration des paramètres de connexion
$host = "";
$user = "";
$passwd  = "";

try
{
$bdd = new PDO("mysql:host=$host; dbname=bienmangrseason", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
  die('Erreur : ' . $e->getMessage());
}
$dt = new DateTime();
$saison = ['printemps','ete','automne','hiver'];
if (isset($_GET['saison']) && in_array($_GET['saison'],$saison)) {
   $saison = $_GET['saison'];
} else {
   $saison = false;
}

// 2. Modification de la requete
if ($saison){
    $query = "SELECT * FROM `liste-fruits` WHERE saison = :saison";
    $sth = $bdd->prepare($query);
$sth->execute(array('saison' => $saison));
} else {
$query = "SELECT * FROM `liste-fruits` WHERE mois LIKE :mois";; 
}

// 3. Tu utilises le mois que tu as récupéré
$sth = $bdd->prepare($query);
$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));
?>

			<div id="entry_0" class="entry_prev odd">
			<img class="thumb" src="../images/ban-rge.png" />
			<h3 class="title rge"><a href="?saison=printemps">Printemps</a></h3></div>
			<div id="entry_1" class="entry_prev even">
			<img class="thumb" src="../images/ban-org.png" />
			<h3 class="title org"><a href="?saison=ete">Eté</a></h3></div>
			<div id="entry_2" class="entry_prev odd">
			<img class="thumb" src="../images/ban-vrt.png" />
			<h3 class="title vrt"><a href="?saison=automne">Automne</a></h3></div>
			<div id="entry_3" class="entry_prev even">
			<img class="thumb" src="../images/ban-blc.png" />
			<h3 class="title blc"><a href="?saison=hiver">Hiver</a></h3></div>
			
<section class="ff-container">
  <ul class="ff-items">
  <?php
  // Recuperation des resultats
  while($row = $sth->fetch(PDO::FETCH_ASSOC))
  {
  ?>
			<li>
			  <a href="produits-de-saison/fiche-fruit.php?id_fruits=<?php echo $row['id_fruits']; ?>">
				<span><?php echo $row['noms']; ?></span>
				<img alt="<?php echo $row['noms']; ?>" src="<?php echo $row['image']; ?>" />
			  </a>
			</li>
		   <?php
		   }
		   ?>
Salut,
dafid5 a écrit :
$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));
Le nom du paramètre c'est ':mois', pas 'mois'.
marcv a écrit :
Salut,
Le nom du paramètre c'est ':mois', pas 'mois'.


Salut, merci de ton aide, mais cela n'a rien changé ! cet requête marchait déjà contrairement à celle nommée saison.

J'en ai profité pour appliquer la modification ":saison" mais aucun changement

Est-ce un rapport avec le "=" ou le "like" ?
Modifié par dafid5 (11 Mar 2013 - 17:46)
Et à la place de

$sth->execute(array(':mois' => '%'  . $dt->format("m") . '%'));


Cela :

$sth->bindParam(':mois', '%'.$dt->format("m").'%', PDO: [langue]ARAM_STR);
$sth->execute();


Ca devrait normalement donner strictement le même résultat.

Si ça ne fonctionne toujours pas, tente ta requête directement dans ta base (en remplaçant à la main les valeurs bien entendu).

Si cela fonctionne, cela veut dire potentiellement que tes variables n'ont pas le bon contenu (var_dump($mavariable) pour vérifier)
Super_baloo8 a écrit :
Et à la place de

$sth-&gt;bindParam(':mois', '%'.$dt-&gt;format(&quot;m&quot;).'%', PDO: [langue]ARAM_STR);
$sth-&gt;execute();




Bonjour Super_baloo8, merci de ton aide.

J'ai toujours une erreur :
Fatal error: Cannot pass parameter 2 by reference in /homez.666/www/fruits-de-saison.php on line 207

Ce que je ne comprend pas, c'est qu'avant de rajouter la variable


$saison = array('printemps','ete','automne','hiver');
if (isset($_GET['saison']) && in_array($_GET['saison'],$saison)) {
   $saison = $_GET['saison'];
} else {
   $saison = false;
}

// 2. Modification de la requete
if ($saison){
    $query = "SELECT * FROM `liste-fruits` WHERE saison = saison";
    $sth = $bdd->prepare($query);
    $sth->execute(array('saison' => $saison));
} else {


J'arrivai bien a afficher mes produits par mois. Je souhaitais juste rendre disponible l'accès au produits par saison.
Modifié par dafid5 (12 Mar 2013 - 08:27)
Super_baloo8 a écrit :
Rhooo

$query = &quot;SELECT * FROM `liste-fruits` WHERE saison = :saison&quot;;


Effectivement faute de frappe ":" mais cela ne fonctionne toujours pas.

Est-ce que ma requête permet bien d'afficher les lignes dont la colonne "saison" est rempli par l'une des saison : printemps, été, automne, hiver ?


// Déclaration des paramètres de connexion
$host = "";
$user = "";
$passwd  = "";

try
{
$bdd = new PDO("mysql:host=$host; dbname=nom", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
  die('Erreur : ' . $e->getMessage());
}
$dt = new DateTime();
$saison = array('printemps','ete','automne','hiver');
if (isset($_GET['saison']) && in_array($_GET['saison'],$saison)) {
   $saison = $_GET['saison'];
} else {
   $saison = false;
}

// 2. Modification de la requete
if ($saison){
    $query = "SELECT * FROM `liste-fruits` WHERE saison = :saison";
    $sth = $bdd->prepare($query);
    $sth->execute(array(':saison' => $saison));
} else {
$query = "SELECT * FROM `liste-fruits` WHERE mois LIKE :mois";; 
}

// 3. Tu utilises le mois que tu as récupéré
$sth = $bdd->prepare($query);
$sth->bindParam(':mois', '%'.$dt->format("m").'%', PDO: [langue]ARAM_STR);
$sth->execute();
?>


lien vers mon site
Modifié par dafid5 (12 Mar 2013 - 22:45)
Le problème n'a pas été résolu, mais j'ai contourné mon problème.

Merci pour l'aide des alsanautes Smiley cligne