1

F3 フレームワークに問題があります。

ユーザーが入力したテキストを検索しようとしています。

ここにいくつかの声明があります:

$db->exec(array("Select userid,username,section from user 
          WHERE section=:sectionId 
          AND username ILIKE '%?%'"),
          array(':sectionId' => $sectionId),
          array( 1=> $queryString),
          NULL));

タイプミスがあれば申し訳ありませんが、生産システムからコードを投稿することは許可されていません。

このステートメントは、空の配列を返します。

変数を文字列に置き換えて psql でテストしましたが、1 つの一致が返されます。

誰かアイデア?

編集:

Sn0opy からの回答:

$db->exec(array("Select userid,username,section from user 
            WHERE section=:sectionId 
            AND username ILIKE '%?%'"),
            array(':sectionId' => $sectionId, 1 => $queryString));

問題は、Postgresql では $1、$2、$3 であり、'?' ではないことです。.

私の解決策(返信してくれたSn0opyに再び感謝します):

文字列を連結する必要があります

('%'|| :queryString || '%')

これは今動作します:

$db->exec(array("Select userid,username,section from user 
            WHERE section=:sectionId 
            AND username ILIKE ('%'|| :queryString || '%') ),
            array(':sectionId' => $sectionId, ':queryString' => $queryString));

文字列を連結しないと、次のエラーが発生します。

ERROR:  could not determine data type of parameter $1
4

1 に答える 1

2

このコードは docsから取得しました。ドキュメントを再確認すると、最初の配列に 3 つの要素があることがわかります。二番目もそうです。あなたの場合、最初に 1 つの要素があり、最後に 3 つの要素があります。最初のパラメータのみarray(':sectionId' => $sectionId)が適用されます。

これはうまくいくはずです:

      $db->exec(array("Select userid,username,section from user 
                WHERE section=:sectionId 
                AND username ILIKE '%?%'"),
                array(':sectionId' => $sectionId, 1 => $queryString));
于 2013-04-02T06:54:41.760 に答える