2015-06-19 124 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

相关问题