简单引用我的查询

时间:2014-03-31 12:10:29

标签: php

我被我的查询困住了,我很确定这是因为引用。

我尝试过很多事情,".$id."'$id',但我仍然会犯同样的错误。

在Firebug中(在我的控制台中),这就是我得到的。 感谢。

Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE cat= '.2.' ORDER BY id' at line 1
)
1

错误就在这一行(在我的查询中):

$requete = "SELECT id, marque, cat FROM cars ORDER BY id WHERE cat= '.$id.' ORDER BY id";

代码:

<?php
header('Content-Type: application/json');
$o = new stdClass(); // on déclare un tableau associatif

 // Connexion à la base de données
    try {
        $bdd = new PDO('mysql:host=localhost;dbname=', '', '');
    } catch(Exception $e) {
        exit('Impossible de se connecter à la base de données.');
    }

// Listes liées
if(isset($_GET['go']) || isset($_GET['id_marque'])) {

    $dropdown = array();

    if(isset($_GET['go'])) {
        // requête qui récupère les marques
        $requete = "SELECT id, marque FROM cars ORDER BY id";
    } else if(isset($_GET['id_marque'])) {
        $id = htmlentities(intval($_GET['id_marque']));
        // requête qui récupère les modeles selon la marque
        $requete = "SELECT id, marque, cat FROM cars ORDER BY id WHERE cat= '.$id.' ORDER BY id";
    }

    // Exécution de la requête
    $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
    $count= $resultat->rowCount();

    // Résultats
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
        // je remplis un tableau et mettant l'id en index (que ce soit pour les marques ou les modeles)
        $dropdown[$donnees['id']][] = utf8_encode($donnees['id']);
    }

    // Envoi du résultat au success
    $o->dropdown = $dropdown;
    $o->count = $count;
}

// Autres liste
if(isset($_GET['go2'])) {

}

echo json_encode($o);

?>

3 个答案:

答案 0 :(得分:1)

  1. 如前所述,请从查询中删除.
  2. 如前所述,您有两个ORDER BY条款。
  3. 将查询更改为:

    "SELECT id, marque, cat FROM cars WHERE cat= '{$id}' ORDER BY id";
    

    假设从你得到的输出中,$id应该是一个整数;然后你可以使用:

    "SELECT id, marque, cat FROM cars WHERE cat= {$id} ORDER BY id";
    

    PS:如果您已经过滤了cat = $id的结果,为什么要为结果选择该列?

答案 1 :(得分:0)

正确的方法是'".$id."',只有一个ORDER BY

$requete = "SELECT id, marque, cat FROM cars WHERE cat= '".$id."' ORDER BY id";

答案 2 :(得分:0)

您的ORDER BY子句之前有一个冗余(和错误)WHERE子句 - 只需删除它:

$requete = "SELECT id, marque, cat FROM cars WHERE cat='$id' ORDER BY id";