PHP Select 和 JSON 编码问题


php select and json encode issue

我正在建立一个学习PHP的网站,并且正在从Jquery UI进行自动建议。

这是我的代码(我很久以前从SO上的一篇文章中获取了这段代码,我不是100%它的作用,所以如果有人可以解释,那将是有帮助的!这段代码来自 suggest.php,我从我的 jquery 代码中调用它(我认为它正在工作,所以我没有发布它,但可以 如果你需要它!

<?
include("config.php");
$queryString = strtolower($_GET["q"]);
$return = array();
$query = mysql_query("SELECT name FROM company WHERE name LIKE '$queryString%' UNION SELECT cat FROM cat WHERE cat LIKE '$queryString%' UNION SELECT subcat FROM subcat WHERE subcat LIKE '$queryString%' LIMIT 10");
while ($row = mysql_fetch_array($query)) {
     array_push($return,array('label'=>$row['name'],'value'=>$row['name']));
}
echo(json_encode($return));
?>

现在,这正在使自动建议工作,但只有相同的结果(例如,如果我输入"Johns",它会提出"Johns Hot Dogs"作为建议,但是如果我输入"fjfjdjf669959",那么它也会出现"Johns Hot Dogs"。

我正在做一个 Mysql 联盟,因为我正在尝试使用公司表中的名称行、cat 表中的 cat 行和 subcat 表中的子猫行填充我的自动建议。

为什么这不起作用?

感谢您的任何帮助!!

我的JQUERy代码看起来像这样:

<script>
    $(function() {
        $( "#search" ).autocomplete({
            source: "suggest.php"
        });
    });
</script>

首先,你的php代码容易受到SQL注入攻击。此外,不推荐使用 mysql_* 函数。请改用 PDO。

代码失败,因为读取了错误的查询变量。 $_GET['q']为空,因为 jQuery UI 自动完成插件使用参数 term 进行搜索查询。使用空$queryString ,执行 SQL 查询

SELECT name FROM company WHERE name LIKE '%'   -- UNION ...

当然,这只会返回所有内容。你想要:

<?php
include("config.php");
$db = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (!isset($_GET['term'])) {
    header('HTTP/1.0 400 Bad Request');
    echo 'Missing term parameter in request';
    exit();
}
$queryString = strtolower($_GET["term"]);
$query = $db->prepare("SELECT name FROM company WHERE name LIKE :qs" .
  " UNION SELECT cat AS name FROM cat WHERE cat LIKE :qs" .
  " UNION SELECT subcat AS name FROM subcat WHERE subcat LIKE :qs " .
  " LIMIT 10");
$query->execute(array(':qs' => $queryString . '%'));
$query->setFetchMode(PDO::FETCH_NAMED);
$result = array_map(function($row) {
    return array('label'=>$row['name'],'value'=>$row['name']);
}, $query->fetchAll());
header('Content-Type: application/json');
echo(json_encode($result));

这是一个实时的、可下载的(包括数据库)演示