0

我正在使用带有准备好的语句的 php mysqli 扩展,但是在一个查询中它没有创建查询对象。

这是代码:

$sqlq = "SELECT id,name FROM productcategories JOIN products ON productcategories.productid = products.id WHERE categoryid=?";
if($allsubcats)
{
    foreach($allsubcats as $key => $data)
    {
        $sqlq .= " OR categoryid=?";
    }
}
echo $sqlq;
if($query = $this->mysqli->connection->prepare($sqlq))
{
    $query->bind_param("i", $cat);
    if($allsubcats)
    {
        foreach($allsubcats as $key => $data)
        {
            $query->bind_param("i", $data[0]);
        }
    }
    $query->execute();
    $query->bind_result($id,$name);
    $query->store_result();
    if($query->num_rows > 0)
    {
        while($row = $query->fetch())
        {
            $allprods["id"] = $id;
            $allprods["name"] = $name;
        }
    }
    $query->close();
}

问题:

if($query = $this->mysqli->connection->prepare($sqlq))
The行if()返回 false,因此没有创建$query对象,也没有执行 if 中的任何代码。

echo $sqlq;回报:

“SELECT id,name FROM productcategories JOIN products ON productcategories.productid = products.id WHERE categoryid=?OR categoryid=?OR categoryid=?OR categoryid=?OR categoryid=?OR categoryid=?”

我看不出有什么问题。

任何帮助将不胜感激,

谢谢,尼科

4

3 回答 3

2

典型的,我一发布这个就自己解决了,其他人在寻求帮助时会看到更好的情况吗?

反正,

SELECT id,name FROM productcategories 在 productcategories.productid = products.id 上加入产品 WHERE categoryid=? 或类别 ID=?或类别 ID=?或类别 ID=?或类别 ID=?或类别 ID=?

本来应该

选择 productcategories.id,products.name,products.id FROM productcategories 加入产品 productcategories.productid = products.id WHERE categoryid=? 或类别 ID=?或类别 ID=?或类别 ID=?或类别 ID=?或类别 ID=?

于 2009-07-21T04:14:10.640 回答
1

嘿尼科。这不是您问题的答案,因为您已经回答了。只是一个不请自来的建议。我不确定该查询多久运行一次,或者可以附加多少类别,但您可能需要考虑使用 WHERE IN 语法。

代替:

WHERE foo = ? OR foo = ? OR foo = ? OR foo = ?

采用:

WHERE foo IN (?,?,?,?)

您将使查询更具可读性,并在您的应用程序中节省极少的时间。(向 MySQL 发送的数据更少,PHP 中的字符串更小)

于 2009-07-21T05:03:49.263 回答
0

我认为您实际上并没有在连接对象上调用准备,而只是在 mysqli 对象本身上调用。

IE


if($query = $this->mysqli->connection->prepare($sqlq))

应该只是


if($query = $this->mysqli->prepare($sqlq))

编辑
结帐第一个例子: http:
//php.net/manual/en/mysqli.prepare.php

编辑2:

啊,是的,我明白了。

作为旁注,您应该考虑给表起别名:


SELECT pc.id,p.name,p.id
FROM productcategories pc
JOIN products p ON pc.productid = p.id
WHERE categoryid=? OR categoryid=? OR categoryid=? OR categoryid=? OR categoryid=? OR categoryid=?
于 2009-07-21T04:12:14.593 回答