我的php脚本应该通过客户端数据库进行搜索,除了数据库中的客户端名称以数字开头(列格式为Varchar(255))外,它的工作效果很好。
if(isset($_GET['search'])) {
$searchVal = "%" . $_GET['search'] . "%";
}
是我如何抓住它,我认为值得一提,因为网站另一端的自动完成功能工作得很好,它使用$ _POST发送数据(我们想使用$ _GET以便网站访问者可以导航)。
$query = "SELECT DISTINCT clients.client_id,
clients.logoFileName,
clients.clientName,
clients.streetAddress,
clients.city,
clients.state,
clients.zip,
clients.latitude,
clients.longitude
FROM clients
INNER JOIN clientData
ON clients.client_id = clientData.client_id
WHERE clients.clientName LIKE ? AND clients.city LIKE ?
OR clientData.clientCategory LIKE ? AND clients.city LIKE ?
OR clientData.term LIKE ? AND clients.city LIKE ?";
//setup
$stmt->prepare($query);
$stmt->bind_param('ssssss',$searchVal,$cityVal,$searchVal,$cityVal,$searchVal,$cityVal);
因此,对于99%的搜索,此搜索运行正常(我们列出了大约1000个客户端,这仅适用于以数字开头的10个)。
因此,如果我要搜索“UPS Store 1840”,我可以搜索“UPS”,“Store”或“1840”,它将返回它们。但如果我搜索“14个蜡烛”,“14”或“蜡烛”都不会返回任何结果。
如果我在PHPMyAdmin中搜索相同的信息,则会发生相同的结果(编辑:好吧,它会返回'0行',而不是一个彻头彻尾的错误)。但是,就像我说的那样,使用$ _POST的查询工作得很好并使用相同的代码(访问类似的搜索,但是提取的数据更少,并且有一个LIMIT)。
这绝对是MYSQL中的一个错误,因此它与发送的信息有关,这让我觉得通过$ _POST发送格式的方式不同于$ _GET。
我做错了什么,我该如何解决?
答案 0 :(得分:0)
嗯,对于任何绊倒这个的人,我想我发现了错误。无论出于何种原因,做INNER JOIN都搞砸了。切换到LEFT JOIN和bam,就像一个魅力。添加了更多要访问的数据,它使用INNER从四个表中拉出,然后向下左移,因此它与INNER JOIN跨越一堆表有关。 SELECT DISTINCT必须保留,或者我得到十亿结果(试图用它来为重量搜索添加'相关'选项)。
另外,我有一个理论认为它与排序有关,即latin1_swedish_ci或其他一些,所以我经历了将所有表格更改为utf8_unicode_ci。所以这两件事之一......