0

为什么这个存储过程不返回任何结果

CREATE PROCEDURE `sp_location_selectAllByTermAutoComplete`(
IN _term VARCHAR(99))
BEGIN

    SELECT
        `title` AS `value`,
        `keyword` AS `label`,
        `city_id`,
        `id` AS `locationtitle_id`
    FROM `locationtitle`
    WHERE
        MATCH(`keyword`) AGAINST(_term  IN BOOLEAN MODE)
    ORDER BY MATCH(`keyword`) AGAINST(_term  IN BOOLEAN MODE) DESC
    LIMIT 0, 10
;END//

但是这个回来了

    SELECT
        `title` AS `value`,
        `keyword` AS `label`,
        `city_id`,
        `id` AS `locationtitle_id`
    FROM `locationtitle`
    WHERE
        MATCH(`keyword`) AGAINST('+NEW*'  IN BOOLEAN MODE)
    ORDER BY MATCH(`keyword`) AGAINST('+NEW*'  IN BOOLEAN MODE) DESC
    LIMIT 0, 10

两个输入参数与其他参数相同。

我有其他存储过程,它们工作正常。

PDO用来执行我的存储过程。

我从未OUT在我的存储过程中使用过,也没有经验如何使用它。

我已经在本地主机中测试了存储过程并且工作正常,但我不知道为什么它在我的服务器上不起作用?

更新

我发现我的问题是什么。

当我调用具有VARCHAR作为输入参数的过程时,字符串字符变为?(问号)。

我的数据库排序规则是UTF-8,任何表也是

我添加了 pdo utf-8 驱动程序,但我不知道为什么它不起作用

即使我不能在 phpMyAdmin 中调用存储过程

4

2 回答 2

0

很难说,但我会尝试检查数据类型、引号等是否与您期望的一样:

CREATE PROCEDURE `sp_location_selectAllByTermAutoComplete`(
IN _term VARCHAR(99))
BEGIN

    SELECT
        _term as my_param,
        MATCH(`keyword`) AGAINST(_term  IN BOOLEAN MODE) as my_param_result,
        `title` AS `value`,
        `keyword` AS `label`,
        `city_id`,
        `id` AS `locationtitle_id`
    FROM `locationtitle`
    WHERE
        MATCH(`keyword`) AGAINST('+NEW*'  IN BOOLEAN MODE)
    ORDER BY MATCH(`keyword`) AGAINST('+NEW*'  IN BOOLEAN MODE) DESC
    LIMIT 0, 10
;END//

然后传入

'+新*

' 作为你的参数。

于 2012-07-31T12:52:55.590 回答
0

我必须在导入或插入任何字符之前设置数据库排序规则 utf8。

现在,我将我的数据库排序规则设置为 utf8,然后再次导入我的数据。问题解决了。

于 2012-07-31T16:21:28.210 回答