加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php select和json编码问题

发布时间:2020-12-13 17:12:53 所属栏目:PHP教程 来源:网络整理
导读:我正在建立一个网站来学习 PHP,并且正在从Jquery Ui进行自动提交. 这是我的代码(我很久以前从SO上的帖子中获取了这些代码,而且我不是100%它的功能,所以如果有人可以解释,那将会有所帮助!)这段代码来自suggest.php,我从我的jquery代码调用(我认为它正在工作
我正在建立一个网站来学习 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));

?>

现在这是使autosuggest工作,但只有相同的结果(例如,如果我键入“Johns”它提出“约翰热狗”作为建议,但如果我键入“fjfjdjf669959”然后它出现“约翰斯热狗“也是.

我正在做一个Mysql Union,因为我试图使用公司表中的名称行,来自cat表的cat行和来自subcat表的subcat行来填充我的autosuggest.

为什么这不起作用?

感谢您的帮助!

我的JQUERy代码如下所示:

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

解决方法

首先,你的PHP代码容易受到 SQL injection attacks的影响.此外,mysql_* functions are deprecated.相反,使用 PDO.

您的代码失败是因为您正在读取错误的查询变量. $_GET [‘q’]为空,因为jQuery UI autocomplete plugin使用参数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));

Here is a live,downloadable (incl. database) demo.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读