Création de variable de critère de recherche

msi79 - 28 févr. 2015 à 19:57
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 8 mars 2015 à 18:29
Bonjour,
j'ai une variable de critère que fonctionne bien et je veux m'inspirer pour créer une deuxième mais j'arrive pas .

voici l'erreur affiche :
ERREUR MYSQL num?ro: 1064
Type de cette erreur: Erreur de syntaxe près de 'AND coloration = 'STANDARD' AND vendu = '0'' à la ligne 3

voici mon code php
    extract($_POST);
$color=array('#FFDFEF','#FFCEFF');
$i = 0;

// si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.




//PRODUIT PARAMETTE
if(!empty($sph_dr)){ $choix2[$i++] = "('".$sph_dr."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')" ;}
if(!empty($categ)) { $choix[$i++] = "cat = '$categ'"; }

$critere = $choix[0]." ";
$critere2 = $choix2[0]." ";

for($j=1;$j<$i;$j++)
{
$critere .= " AND ".$choix[$j]." ";
$critere2 .= " AND ".$choix2[$j]." ";
}

// enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
if($i > 0)
{
$sql = "SELECT *
FROM tb_stock_caracteristiques
WHERE $critere
AND vendu = '0'
";
$requete = mysql_query($sql,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
echo "<br> <b>La requête est :</b><br> ".$sql;
$n = mysql_num_rows($requete);
if($n>0){
....
while ($liste = mysql_fetch_assoc($requete)) {
$j=$i%2;
$sql0 = "SELECT *
FROM tb_stock_caracteristiques
WHERE $critere2

AND id = '".$liste["id"]."'
";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
echo "<br> <b>La requête est :</b><br> ".$sql0;
$n0 = mysql_num_rows($requete0);
if($n0>0){
.......

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
28 févr. 2015 à 20:25
Bonjour,

Essayes ceci :
$sql = "SELECT * 
      FROM tb_stock_caracteristiques 
	  WHERE   vendu = '0'
          $critere
	 ";


Si ça ne fonctionne pas.... fais un ECHO de ta variable $sql
echo "<br> <pre>La requête est :<br>".$sql."</pre>";


Puis testes la directement dans ta base de données.
par exemple avec HeidiSql : http://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
28 févr. 2015 à 20:27
Et pour créér ton $critere .. plutôt que de passer par une boucle.. utilises donc un IMPLODE
 $critere = implode(" AND ", $choix);
0
j'ai utilisé
$sql = "SELECT * 
FROM tb_stock_caracteristiques
WHERE vendu = '0'
$critere
";

et avec :
echo "<br> <pre>La requête est :<br>".$sql."</pre>";

voici l'erreur que ça met :
La requ?te est :
SELECT * FROM tb_stock_caracteristiques WHERE vendu = '0' AND coloration = 'STANDARD'

ERREUR MYSQL num?ro: 1064
Type de cette erreur: Erreur de syntaxe près de 'AND id = '17'' à la ligne 4
0
mais j'ai fait ceci et il n'y a pas d'erreur maisje me demande si c'est juste :
$sql0 = "SELECT * 
FROM tb_stock_caracteristiques
WHERE ('".$sph_dr."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')
OR ('".$sph_gche."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')
OR ('".$sph_dr3."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')
OR ('".$sph_gche3."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')

OR ('".$cyldr_drt."' BETWEEN '".$liste["cyl_debut"]."' AND '".$liste["cyl_fin"]."')
OR ('".$cydr_gche."' BETWEEN '".$liste["cyl_debut"]."' AND '".$liste["cyl_fin"]."')
OR ('".$cyldr_drt3."' BETWEEN '".$liste["cyl_debut"]."' AND '".$liste["cyl_fin"]."')
OR ('".$cydr_gche3."' BETWEEN '".$liste["cyl_debut"]."' AND '".$liste["cyl_fin"]."')

OR ('".$add_drt."' BETWEEN '".$liste["add_debut"]."' AND '".$liste["add_fin"]."')
OR ('".$add_gche."' BETWEEN '".$liste["add_debut"]."' AND '".$liste["add_fin"]."')
OR ('".$add_drt3."' BETWEEN '".$liste["add_debut"]."' AND '".$liste["add_fin"]."')
OR ('".$add_gche3."' BETWEEN '".$liste["add_debut"]."' AND '".$liste["add_fin"]."')
AND id = '".$liste["id"]."'
";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 4
8 mars 2015 à 18:29
Bonsoir,

Faire trop de OR et de AND sur trop de champs va ralentir très fortement les performances de votre site web.

Cdlt
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 mars 2015 à 00:45
La première requête ne semble pas poser de problème...
Il semble que le souci soit sur la seconde

$sql0 = "SELECT * 
      FROM tb_stock_caracteristiques 
	  WHERE  $critere2	  
	  AND  id = '".$liste["id"]."'
	 ";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
 echo "<br> <b>La requête est :</b><br> ".$sql0;


ERREUR MYSQL num?ro: 1064
Type de cette erreur: Erreur de syntaxe près de 'AND id = '17'' à la ligne 4


Modifies ton code ainsi pour trouver d'où vient le problème :


$sql0 = "SELECT * 
      FROM tb_stock_caracteristiques 
	  WHERE  id = '".$liste["id"]."' 
          $critere2 	 ";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n <br> <b>La requête est :</b><br> ".$sql0 );






0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avec ta proposition voici l'erreur :

La requ?te est :
SELECT * FROM tb_stock_caracteristiques WHERE vendu = '0' AND coloration = 'STANDARD'

ERREUR MYSQL num?ro: 1064
Type de cette erreur: Erreur de syntaxe près de '('12' BETWEEN '' AND '') AND' à la ligne 4
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 mars 2015 à 15:07
C'est une nouvelle erreur...
En gros... tu as des soucis sur chacune de tes requêtes..... et je ne vais pas m'amuser à toutes les repasser en revue à ta place !

Donc.. si tu as compris le principe du débogage.....
Tu fais un ECHO de tes requêtes AVANT leur exécution .... tu regardes ce qui y cloche...(un conseil... testes les en direct dans ta BDD ..... apèrs tout..ça ne fais que 200 fois que je te le dis.... à chacune de tes interventions sur ce forum...) ... et ...oh miracle... tu vas trouver les erreur !
0
quand je teste directement comme ça :
$sql0 = "SELECT * 
FROM tb_stock_caracteristiques
WHERE ('".$sph_dr."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')
AND id = ".$liste["id"]."
";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
echo "<br> <b>La requête est :</b><br> ".$sql0;


ca marche

par contre quand je fais :

if(!empty($sph_dr)){ $choix2[$i++] = "('".$sph_dr."' BETWEEN '".$liste["sph_debut"]."' AND '".$liste["sph_fin"]."')" ;}
.
.
.


$sql0 = "SELECT *
FROM tb_stock_caracteristiques
WHERE $critere2
AND id = ".$liste["id"]."
";
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
echo "<br> <b>La requête est :</b><br> ".$sql0;
.
.
.

ça m'affiche l'erreur :
ERREUR MYSQL num?ro: 1064
Type de cette erreur: Erreur de syntaxe près de 'AND coloration = 'STANDARD' AND vendu = '0'' à la ligne 3
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 mars 2015 à 17:52
Si tu fais l'echo de ta variable SQL après le DIE .. tu ne pourras pas la voir !!!!!
Donc :
Tu peux :

- Placer le ECHO AVANT
echo "<br> <b>La requête est :</b><br> ".$sql0;
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );


Ou la mettre dans le DIE
$requete0 = mysql_query($sql0,$cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n<br> <b>La requête est :</b><br> ".$sql0; );


Une fois la variable SQL affichée.... tu la prends ... et tu la testes directement dans ta BDD !
(Dernière fois que je te le dis !!!!!)
0
Rejoignez-nous