IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ma requet SELECT ne fonctionne pas avec un AND [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut Ma requet SELECT ne fonctionne pas avec un AND
    Bonjour à tous,

    Je m'embete avec un truc de bete.

    Je fais une requete pour extraire des positions d'une base de donnée MySL. Je fais donc un select

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    	if(isset($_POST['h']))
    	{
    		$hour = intval($_POST['h']);
    	}else{
    		$hour = 1;
    	}
    if(isset($_POST['devise_id']))
    	{
    		$devise_id = $_POST['devise_id']; // J'ai aussi essayé avec intval() come pour l'heure
    	}else{
    		$devise_id = 0;
    	}
     
    	try{
     	   $conn = new PDO('mysql:host='.$cfg_db_host.';charset=utf8;dbname='.$cfg_db_db, $cfg_db_user , $cfg_db_password);
    	}
    	catch (Exception   $e){echo json_encode(array("retour"=>'Erreur de connexion à la bdd', "e" => $e )); die();}
     
    	$sql = 'SELECT * FROM positions WHERE devise_id LIKE 1 AND timestamp >= DATE_SUB(NOW(), INTERVAL '.$hour.' HOUR) ORDER BY timestamp ASC';
    	//$sql = 'SELECT * FROM positions WHERE devise_id LIKE '.$devise_id.' AND timestamp >= DATE_SUB(NOW(), INTERVAL '.$hour.' HOUR) ORDER BY timestamp ASC';

    Comme indiqué ci-dessus, ca fonctionne.

    En revanche que j'inverse mon sélect en décommentant la premiere
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Premiere ligne:
    //$sql = 'SELECT * FROM positions WHERE devise_id LIKE 1 AND timestamp >= DATE_SUB(NOW(), INTERVAL '.$hour.' HOUR) ORDER BY timestamp ASC';
    // Deuxième ligne:
    $sql = 'SELECT * FROM positions WHERE devise_id LIKE '.$devise_id.' AND timestamp >= DATE_SUB(NOW(), INTERVAL '.$hour.' HOUR) ORDER BY timestamp
    Ca ne mearche plus.

    Par exemple, j'ai des position enregistrée il y a 12 heures. Si hour prend la valeur de 12, il m'affiche qu'une seule position, alors que si je commente la deuxième ligne et décommente la premiere, comme avant, ca marche.

    Qu'es-ce qu'il y a de faux dans mon $sql?
    J'utlise sublime et il me colorise le texte pour distinguer le code
    Il doit avoir un bug, car quand j'utilise ma deuxième ligne, le AND après '.$devise_id.', n'est plus rouge alors qu'il est dans ma premiere ligne

    Merci pour votre avis

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprends pas bien ton debugage. La seule chose que change entre tes deux requêtes c'est "devise_id" et tu ne nous dis pas si tu as vérifié ce qu'il valait dans le deuxième cas.
    Affiche donc la requête finale dans les deux cas, tu verras la différence.

    De plus si devise_id est un entier, pourquoi utiliser un LIKE ? Et si c'est un entier, il faut bien le protéger avec INTVAL().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut
    Hello,
    Mon dieux, j'allucine l'erreur que j'ai faite
    c'est "devise_id" et tu ne nous dis pas si tu as vérifié ce qu'il valait dans le deuxième cas
    Ca ma mis la puce à l'oreil. J'avais oublié de le passer en paramètre Aïe!!!!!
    La honte de déranger pour ca. Je suis désolé.

    En attendant, j'ai mis un intval comme ceci
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(isset($_POST['devise_id']))
    	{
    		$devise_id = intval($_POST['devise_id']);
    	}else{
    		$devise_id = 0;
    }

    Maintnenant, il y a une observation que me quetsionne
    pourquoi utiliser un LIKE
    Alors que je devrai-je utiliser alors?
    J'ai essayé avec ==, sans succès
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    if(isset($_POST['h']))
    	{
    		$hour = intval($_POST['h']);
    	}else{
    		$hour = 1;
    	}
     
    	if(isset($_POST['devise_id']))
    	{
    		$devise_id = intval($_POST['devise_id']);
    	}else{
    		$devise_id = 0;
    		echo $devise_id;
    	}
     
    	try{
     	   $conn = new PDO('mysql:host='.$cfg_db_host.';charset=utf8;dbname='.$cfg_db_db, $cfg_db_user , $cfg_db_password);
    	}
    	catch (Exception   $e){echo json_encode(array("retour"=>'Erreur de connexion à la bdd', "e" => $e )); die();}
     
    	$sql = 'SELECT * FROM positions WHERE devise_id LIKE '.$devise_id.' AND timestamp >= DATE_SUB(NOW(), INTERVAL '.$hour.' HOUR) ORDER BY timestamp ASC';
     
    	$req = $conn->prepare($sql);
    	$req->execute();
    	$result = $req->fetchAll(PDO::FETCH_ASSOC);

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est = en SQL
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut
    D'accord, merci Sabotage!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Requete parametre ne fonctionne pas avec formulaire
    Par alicec2000 dans le forum Access
    Réponses: 8
    Dernier message: 20/01/2015, 04h17
  2. Requete ne fonctionne pas avec le sigle égal
    Par kernel57 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/07/2014, 15h36
  3. [AC-2010] requete fonctionne pas avec champ calcule
    Par jeromus dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/02/2010, 20h25
  4. requete SQL avec sous requete qui ne fonctionne pas
    Par skyarnangel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/02/2009, 14h47
  5. Réponses: 4
    Dernier message: 06/11/2007, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo