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ストアドプロシージャで使用したことはなく、使用方法の経験もありません。

localhost でストアド プロシージャをテストしたところ正常に動作しましたが、サーバーで動作しない理由がわかりません。

アップデート

私の問題は何かを見つけました。

VARCHAR入力パラメーターとして持つプロシージャーを呼び出すと、文字列の文字が?(疑問符) に変わります。

私のデータベースの照合順序はUTF-8で、どのテーブルもUTF-8 です

そして、pdo utf-8ドライバーを追加しましたが、なぜ機能しないのかわかりません

phpMyAdminでストアドプロシージャを呼び出すことさえできません

4

2 に答える 2

0

文字をインポートまたは挿入する前に、データベースの照合順序を utf8 に設定する必要がありました。

ここで、データベースの照合順序を utf8 に設定し、データを再度インポートします。問題が解決しました。

于 2012-07-31T16:21:28.210 に答える
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*

' パラメータとして。

于 2012-07-31T12:52:55.590 に答える