0

変数のリストをJoomlaのエンコードされたURLに出力するfromがあり、モデルがmySQLクエリを実行したときに結果を返す必要があります。

問題は、ユーザーが検索クエリにnull値を入力すると、フォームが次のように返される可能性があることです。mysite.com/index.php?option=com_mycom&view=myview&price=1000&city=&state=

POST/GET値のない入力を行わないスクリプトをフォームで実行する必要があると思います。

ただし、mySQLクエリをまとめると、構文上の問題が発生します。

これが私がこれまでに持っているものです:

$query = "
        SELECT *
            FROM ".$db->nameQuote('#__mls')."
            WHERE "
                .if ($zip > 0)
                    {.$db->nameQuote('MSTZIP')." = ".$db->quote($zip)."}
                else {
                }.
                .if ($city != null)
                    { AND ".$db->nameQuote('MSTCITY')." LIKE ".$db->quote($city)."}
                else {
                }.
                .if ($bdrms != null)
                    { AND ".$db->nameQuote('MSTBDRMS')." > ".$db->quote($bdrms)."}
                else {
                }.
                .if ($bths != null)
                    { AND ".$db->nameQuote('MSTBATHS')." > ".$db->quote($bths)."}
                else {  
                }.
                .if ($lprice != null, $hprice != null)
                    { AND ".$db->nameQuote('MSTLISTPRC')." BETWEEN ".$db->quote($lprice)." AND ".$db->quote($hprice)."}
                else {
                }.
        ; 
";

IFステートメント間の演算子が間違っていますか?構文に何かが足りないだけですか?

また、PHPのデバッグ方法についてのリファレンスがあれば、よろしくお願いします。JSfiddleに似ていますが、PHP用です。

4

1 に答える 1

2

WHERE AND...ロジックフロー以外の構文には、ユーザーがzipを省略した場合にステートメントが読み取られ、失敗するという意味で欠陥があります。WHERE 1=1この問題は、を使用してから、条件付きで相互に接頭辞を付けることで修正できますAND

あなたのifステートメントはelse、それらが空白の場合、以下がなくても実行できます。これは必要のないエラーではありません。

また、最後のifステートメントには2つの条件があり、それらはであると思いますAND&&表記を使用する必要があります。すなわちif(this==true && that==true)

最後に、私が気付いた順序以外の順序ではありません。ifステートメントを連結しますが、それは必要ありません。この場合もエラーではないと思います。必要ありません。実際にはエラーの原因になっている可能性があります。次のことを考慮してください。

$query = "
    SELECT *
        FROM ".$db->nameQuote('#__mls')."
        WHERE 1 = 1 "
            .if ($zip > 0){."
                AND ".$db->nameQuote('MSTZIP')." = ".$db->quote($zip)
            }
            if ($city != null){."
                AND ".$db->nameQuote('MSTCITY')." LIKE ".$db->quote($city)
            }
            // on and on like this perhaps

        ."; 
    "; // closes the string

私はこのタイプのフローを決して支持していません、それは非常にすぐに複雑になります。

デバッグするには、受信したエラーを表示する可能性があります。

于 2012-12-05T18:33:43.747 に答える