2014-07-14 208 views
0

我正在嘗試創建一個動態sql查詢,將我的cat列與用戶在表單中輸入的任何內容進行比較。我的想法是,我將能夠獲取一組動態值,然後將它們與cat列進行比較。這就是我試圖做的:動態MySQL查詢

// Loop to get the array of values from form 
$get_arr = $_GET; 
foreach ($get_arr as $get) { 
    $var = "AND cat LIKE $get"; 
} 
// SQL query 
$sql = "SELECT * FROM items 
WHERE title LIKE 'this' 
AND description LIKE 'that' 
'%$var%'"; 

它不工作 - $var始終顯示爲空白。解決方案是什麼?

+0

從一開始調試,'的print_r($ _ GET);' –

+0

解析錯誤並不能幫助。 – AbraCadaver

+1

現在,您只將'$ var'變量分配給最後一個'$ _GET'元素。你知道這個,對嗎?而且,如果您不知道這一點,您的代碼也容易受到SQL注入的影響。 – Max

回答

2

你有幾個問題。

  1. 你不是逃避輸入,所以你受SQL注入或語法錯誤。

  2. 您需要在LIKE參數周圍加上引號。

  3. 您每次通過循環覆蓋$var而不是附加到它。

  4. 您不會在表達式周圍放置任何空格。

  5. 你把%圍繞整個$var,它應該在LIKE參數裏面。

foreach ($get_arr as $get) { 
    $get = mysqli_real_escape_string($conn, $get); 
    $var .= " AND cat like '%$get%'"; 
} 

$sql = "SELECT * FROM items 
     WHERE title LIKE '%this%' 
     AND description LIKE '%that%' 
     %var"; 
+0

非常感謝,你真的幫助我!注意,第三行缺少一個分號,它應該是'$ var。=「,而貓就像'%$ get%'」;'並且在最後一行中,缺少'$'符號。但再次感謝 – terf