PHP查询Where和Like

时间:2014-09-21 20:50:51

标签: php mysql database pdo sql-like

我尝试使用带有jQuery自动完成功能的系统来提供listview 这是我的PHP代码,除了我找不到问题,我在控制台中没有错误,但我似乎无法获取数据库中的数据。它找不到我的信件。

条件"其中"没问题和检查(我甚至直接尝试SQL查询进入phpMyAdmin,它可以工作,但不能通过php文件)

<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=schoolby_fr', '*****', '*****');
}
catch (Exception $e)
{
    die('Erreur : ' . $e->getMessage());
}
$term = "Malrau";
$pays = "France";
$dept = "Vosges";
$tipe = "Lycée";

$requete = $bdd->prepare('SELECT * FROM school WHERE s_pays="'.$pays.'" AND s_dept="'.$dept.'" AND s_type="'.$tipe.'" AND s_ecole LIKE :term');
$requete->execute(array('term' => '%'.$term.'%'));

$array = array(); 

while($donnee = $requete->fetch())
{
array_push($array, $donnee['s_ecole']); 
}

echo json_encode($array);

?>

EDIT 22/09/2014

如果我自愿回忆条件$pays$tipe,但离开$term$dept,我想告诉你我得到了什么。 因为它不适用于所有条件。

In Phpmyadmin

Via PHP in console

2 个答案:

答案 0 :(得分:0)

如果你通过取出变量来简化你的准备陈述并对值进行硬编码,那么你可以确定它是否是变量

答案 1 :(得分:0)

您应该以正确的方式准备查询,不需要循环,并始终打开错误模式。

<?php
try{
    $bdd = new PDO('mysql:host=localhost;dbname=schoolby_fr', '*****', '*****');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $term = "Malrau";
    $pays = "France";
    $dept = "Vosges";
    $tipe = "Lycée";

    $query = 'SELECT * 
              FROM school 
              WHERE s_pays= :pays
                    AND s_dept= :dept
                    AND s_type= :tipe
                    AND s_ecole LIKE :term';

    $requete = $bdd->prepare($query);
    $requete->execute(array(':pays' => $pays,
                            ':dept' => $dept,
                            ':tipe' => $tipe,
                            ':term' => '%'.$term.'%',
                      ));

    $donnees = $requete->fetchAll(); 
    //var_dump($donnees);
    echo json_encode($array);
}
catch (PDOException $e){
    die('Erreur : ' . $e->getMessage());
}