PHP Mysqli准备不创建语句对象
我将php mysqli扩展用于准备语句,但在一个查询中,它没有创建查询对象 代码如下:PHP Mysqli准备不创建语句对象,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我将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 = "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))
if()
返回false,因此不创建$query
对象,也不执行if中的任何代码
echo$sqlq代码>返回:
从productcategories中选择id、名称在productcategories.productid=products.id上加入产品,其中categoryid=?或categoryid=?或categoryid=?或categoryid=?或categoryid=
我看不出有什么问题
任何帮助都将不胜感激
谢谢,Nico我认为您实际上并没有调用连接对象上的prepare,而只是调用mysqli对象本身
i、 e
应该是
if($query = $this->mysqli->prepare($sqlq))
编辑
签出第一个示例:
编辑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=?
我认为您实际上并没有调用连接对象上的prepare,而只是调用mysqli对象本身
i、 e
应该是
if($query = $this->mysqli->prepare($sqlq))
编辑
签出第一个示例:
编辑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=?
典型的情况是,我一发布这篇文章就自己解决了这个问题,有没有其他人在寻求帮助时就看得更清楚了
反正
选择id,name FROM productcategories在productcategories.productid=products.id上加入产品,其中categoryid=?或类别ID=?或类别ID=?或类别ID=?或类别ID=?或类别ID=
应该是
从productcategories中选择productcategories.id、products.name、products.id在productcategories.productid=products.id上加入产品,其中categoryid=?或类别ID=?或类别ID=?或类别ID=?或类别ID=?或者categoryid=?典型的,我一发布这篇文章就自己解决了这个问题,有没有其他人在他们请求帮助时会看得更清楚
反正
选择id,name FROM productcategories在productcategories.productid=products.id上加入产品,其中categoryid=?或类别ID=?或类别ID=?或类别ID=?或类别ID=?或类别ID=
应该是
从productcategories中选择productcategories.id、products.name、products.id在productcategories.productid=products.id上加入产品,其中categoryid=?或类别ID=?或类别ID=?或类别ID=?或类别ID=?或者categoryid=?嘿,尼科。这不是你问题的答案,因为你已经回答了。只是一个不请自来的建议。我不确定这个查询会运行多长时间,或者可以追加到多少个类别,但是你可能想考虑在语法中使用何处。
而不是:
WHERE foo = ? OR foo = ? OR foo = ? OR foo = ?
使用:
您将使查询更具可读性,并在应用程序中节省少量时间。(向MySQL发送的数据越少,PHP中的字符串越小)嘿,尼科。这不是你问题的答案,因为你已经回答了。只是一个不请自来的建议。我不确定这个查询会运行多长时间,或者可以追加到多少个类别,但是你可能想考虑在语法中使用何处。
而不是:
WHERE foo = ? OR foo = ? OR foo = ? OR foo = ?
使用:
您将使查询更具可读性,并在应用程序中节省少量时间。(向MySQL发送更少的数据,PHP中更小的字符串)一般来说是的,但在本例中$mysqli是自定义类的对象,其中$connection是$mysqli连接。一般来说是的,但在本例中$mysqli是自定义类的对象,其中$connection是$mysqli连接。您不是唯一一个,如果这能让你安心^^^你有一个很好的反应,回来给出解决方案:-)站起来投票回答你自己的问题谁会这么想:D@hobodave,是的,没错,虽然我倾向于把我那些不幸的朋友当作“橡皮鸭”。你不是唯一一个,如果这能让你放心的话^^^而且你有很好的反射能力,回来给出解决方案:-)站起来投票回答你自己的问题D@hobodave,是的,没错,虽然我倾向于把我那些不幸的朋友当作“橡皮鸭”。嗨,谢谢你,我会换的。我想我在某些方面越来越在行了,结果发现还有很多东西要学。我已经投了你的赞成票,但我不会把它标为被接受的答案,因为它不能回答问题。嗨,谢谢你,我会改变它的。我想我在某些方面越来越在行了,结果发现还有很多东西要学。我已经投了你的赞成票,但我不会把它作为被接受的答案,因为它不能回答问题。