当字符串以数字开头时mysqli给出错误

时间:2013-03-07 18:45:36

标签: php mysqli int varchar

我的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。

我做错了什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

嗯,对于任何绊倒这个的人,我想我发现了错误。无论出于何种原因,做INNER JOIN都搞砸了。切换到LEFT JOIN和bam,就像一个魅力。添加了更多要访问的数据,它使用INNER从四个表中拉出,然后向下左移,因此它与INNER JOIN跨越一堆表有关。 SELECT DISTINCT必须保留,或者我得到十亿结果(试图用它来为重量搜索添加'相关'选项)。

另外,我有一个理论认为它与排序有关,即latin1_swedish_ci或其他一些,所以我经历了将所有表格更改为utf8_unicode_ci。所以这两件事之一......