存储过程不会将任何结果作为输出返回,但查询工作正常

时间:2012-07-31 12:44:42

标签: mysql stored-procedures

为什么此存储过程不会返回任何结果

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,也没有使用它的经验。

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

更新

我发现我的问题是什么。

当我调用以VARCHAR作为输入参数的过程时,字符串字符将更改为?(问号)。

我的数据库归类是 UTF-8 ,而且任何表格都是

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

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

2 个答案:

答案 0 :(得分: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//

然后传入

  

'+ NEW *

'作为参数。

答案 1 :(得分:0)

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

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