2013-01-10 19 views
0

我正在處理數據表,並且我正在嘗試創建一個自定義的WHERE子句。我有以下代碼:創建一個自定義的WHERE子句來過濾數據表

$sWhere = "WHERE office=".$varOffice; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") 
{ 
    $sWhere = "WHERE ("; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true") 
     { 
      $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch'])."%' OR "; 
     } 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ') AND office='.$varOffice; 
} 

調試後,我發現MySQL正在拋出一個錯誤。錯誤1605

我決定呼應$sQuery這裏找到:

$sQuery = " 
     SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."` 
     FROM $sTable 
     $sWhere 
     $sOrder 
     $sLimit 
     "; 

然後我發現了錯誤,是因爲在WHERE子句中沒有報價,如:

SELECT SQL_CALC_FOUND_ROWS `amount_due_owed`, `amount_paid`, `amount_remaining`, `reference_number` FROM accounting WHERE office=Office 1 

它應該是:

WHERE office='Office 1' 

我一直在努力,我一直都沒有弄明白。我該如何得到變量的單引號?

回答

2

添加單引號在你的第一行:

$sWhere = "WHERE office='".$varOffice."'"; 

另外:如果你只是去周圍插入隨機變量$_GET到您的SQL查詢,你最終將有一個bad time。請使用PDO或更安全一些(即使mysql_real_escape_string()也不安全)。

+1

這是一種方式,但如果使用<<< QEND ... QEND存在很多此類「事件」聲明,可能會變得非常混亂;可以非常方便,因爲它們允許內容中的'和' –

+1

非常真實......但真正的答案是準備好語句:) – glomad

+0

準備好的語句在可能的情況下始終是最好的。有時,當您需要有條件地或特別地構建​​語句時迭代你不能輕易使用它們,因爲你不知道有多少個參數。 –