0

我的 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 Candles”,“14”或“Candles”都不会返回任何结果。

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

它肯定是在 MYSQL 中弹出一个错误,所以它与正在发送的信息有关,这让我认为通过 $_POST 发送的格式与 $_GET 不同。

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

4

1 回答 1

0

好吧,对于任何偶然发现这一点的人,我想我发现了错误。无论出于何种原因,进行 INNER JOIN 都会把事情搞砸。切换到 LEFT JOIN 和 bam,就像一个魅力。添加了更多要访问的数据,它使用 INNER 从四个表中提取,然后是 LEFT LEFT,所以这与 INNER JOIN 跨一堆表有关。SELECT DISTINCT 必须保留,否则我会得到十亿个结果(很想用它来为权重搜索添加“相关性”选项)。

另外,我有一个理论认为它与 latin1_swedish_ci 或类似的排序规则有关,所以我通过并将所有表更改为 utf8_unicode_ci。所以这两件事之一...

于 2013-03-10T21:34:55.460 回答