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


mysqli giving an error when string starts with a number

我的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商店1840",我可以搜索"UPS","商店"或"1840",它将返回它们。但是,如果我搜索"14个蜡烛","14"或"蜡烛"都不会返回任何结果。

如果我在PHPMyAdmin中搜索相同的信息,同样的结果会发生(编辑:好吧,它给出了'0行返回',而不是一个彻底的错误)。但是,就像我说的,使用$_POST的查询工作得很好,并且使用相同的代码(访问类似的搜索,但提取的数据更少,并且有一个限制)。

这绝对是弹出一个错误在MYSQL中,所以它有一些东西与信息被发送,这让我认为通过$_POST发送是格式化不同于$_GET。

我做错了什么,我该如何修复它?

好吧,对于任何偶然发现这个的人,我想我发现了错误。不管出于什么原因,执行INNER JOIN会把它搞砸。切换到左连接,砰的一声,工作得很好。添加了更多要访问的数据,它使用INNER从四个表中提取数据,然后使用LEFT LEFT,所以这与跨一堆表的INNER JOIN有关。SELECT DISTINCT必须保留,否则我将得到10亿个结果(我很想用它来为权重搜索添加"相关性"选项)。

另外,我有一个理论,它与排序是latin1_swedish_ci或类似的东西有关,所以我遍历并将所有表更改为utf8_unicode_ci。这两件事之一。