繁体   English   中英

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

[英]Why is this PHP / mySQL query giving me an error?

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

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 ...

我究竟做错了什么?

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

这种样式可以帮助您跟踪是否在字符串中使用了“”或“”,并且比将其放入难以阅读的巨型字符串中更容易调试。

那可能是因为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM