2012-12-05 69 views
0

我有一個從輸出的變量列表到Joomla中的編碼的URL,然後當模型運行mySQL查詢時返回結果。在php查詢中省略空值

的問題是,用戶可能輸入引起的形式返回搜索查詢的空值: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。

回答

2

語法除了邏輯流程存在缺陷之外,如果用戶省略了zip,語句將會顯示爲WHERE AND...,這將會失敗。該問題可以通過使用WHERE 1=1來解決,然後以AND作爲前提條件。

您的if聲明如果它們爲空則也可以在沒有else的情況下執行。這不僅僅是不需要的錯誤。

也,最後if聲明有兩個條件,我假設他們是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 

我不贊成這種類型的流程,它變得非常迅速。

調試可能會顯示您收到的錯誤。