2015-06-19 123 views
1

我產生了這樣的查詢的第一部分:爲什麼這個PHP/mySQL查詢給我一個錯誤?

while ($all_products = $db->fetch_array($all_prods)) 
     { 
      $filter_string .= 'AND product_id !='; 
      $filter_string .= $all_products['item_id']; 
      $filter_string .= ' '; 
} 

,然後第二部分是這樣的:

$sql_more_items = $db->query("SELECT * FROM db_products 
WHERE owner_id='" . $user_id . "' AND active=1 '" . $filter_string . "' 
ORDER BY RAND() LIMIT 10"); 

但是它給了我一個MySQL的語法錯誤和$filter_string部分奇怪增加'前,後弦的兩倍,因此它運行這樣的:

WHERE user_id='12345' AND active=1 'AND product_id !=0001 AND product_id !=0002 ' ORDER BY RAND ...

我在做什麼錯?

回答

3

$filter_string增加了'因爲你把它放在那裏。 :P

只圍繞$filter_string雙引號試試:

$sql_more_items = $db->query("SELECT * FROM db_products WHERE owner_id='" . $user_id . "' AND active=1 " . $filter_string . "ORDER BY RAND() LIMIT 10"); 
+0

衛生署謝謝! )必須馬上睡覺:P – user1227914

+0

@ user1227914或其他更多咖啡!:)小心接受作爲答案嗎? – kittykittybangbang

+0

除非15分鐘過去,否則他不能es,要有耐心。 +1雖然趕上它如此之快。 – Rahul

1

這是因爲部分

`"' AND active=1 '"` 
       ^.... This ' here 
+0

謝謝:)).... – user1227914

2
$sql_more_items = $db->query("SELECT * FROM db_products 
WHERE owner_id='" . $user_id . "' AND active=1 '" . $filter_string . "' 
ORDER BY RAND() LIMIT 10"); 

檢查你正在執行字符串連接的方式(把大概一起串起來)。好像有,你正在使用「‘而不僅僅是一個’

我會用空格(和良好的代碼編輯器),你的優勢被重新格式化您的代碼看起來像這樣的複製/粘貼錯誤:

$queryString = "SELECT * FROM db_products WHERE owner_id='$user_id'" 
." AND active=1 "      //Note these 
. $filter_string      //are separated 
. "ORDER BY RAND() LIMIT 10 ";   //into individual lines 

$sql_more_items = $db->query($queryString); 

這種風格可以幫助你保持的你是否正在使用「或」你的字符串的軌道,還可以幫助你更容易調試事情比把它變成一個巨大的難以閱讀的字符串

+0

有道理,謝謝:) – user1227914

相關問題