为什么这个PHP/mySQL查询会给我一个错误?

为什么这个PHP/mySQL查询会给我一个错误?,php,mysql,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 = $d

我正在生成查询的第一部分,如下所示:

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");
$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);
然后第二部分是这样的:

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");
$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);
但是它给了我一个mySQL语法错误,
$filter_string
部分奇怪地在字符串前后添加了两次
'
,因此它的运行方式如下:

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");
$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);
其中user\u id='12345'和active=1'以及product\u id=0001和产品标识=0002'按兰特订购…


我做错了什么?

$filter\u string
添加了
,因为您把它放在了那里:P

请尝试在
$filter\u 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");

$filter\u string
添加了
,因为您将其放在了那里:P

请尝试在
$filter\u 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");

那可能是因为这个角色

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

那可能是因为这个角色

`"' AND active=1 '"`
                 ^.... This ' here
检查执行字符串连接(组合字符串)的方式。当您使用“”而不是仅使用“”时,似乎出现了复制/粘贴错误

我会使用空白(和一个好的代码编辑器),通过将代码重新格式化为如下所示,为您带来好处:

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");
$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);
这种风格有助于跟踪字符串是否使用“或”,也有助于比将其放入一个巨大的难读字符串更容易调试

检查您执行字符串连接(组合字符串)的方式。当您使用“”而不仅仅是“”时,似乎出现了复制/粘贴错误

我会使用空白(和一个好的代码编辑器),通过将代码重新格式化为如下所示,为您带来好处:

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");
$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);

这种风格有助于您跟踪字符串是否使用“或”,也有助于您比将其放入一个巨大的难读字符串中更轻松地调试东西。

Doh!谢谢:)很快就要睡觉了:P@user1227914或者更多的咖啡!:)你愿意接受我的回答吗?他不能,除非15分钟过去,耐心点+我很感谢你这么快就抓住了它。是的,马上就好了……它告诉我要等10分钟。别担心:)@user1227914 B-)谢谢你,朋友!啊!谢谢:)很快就要睡觉了:P@user1227914或者更多的咖啡!:)你愿意接受我的回答吗?他不能,除非15分钟过去,耐心点+我很感谢你这么快就抓住了它。是的,马上就好了……它告诉我要等10分钟。别担心:)@user1227914 B-)谢谢你,朋友!