2009-07-21 45 views
0

我正在使用php mysqli扩展与准备好的语句,但在一个查询中它没有创建查询对象。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))
if()被返回false,因此不创建$query对象,而不是代码的执行任何内部的线如果。

echo $sqlq;回报:

“SELECT ID,名字从productcategories JOIN产品ON productcategories.productid = products.id WHERE类别id = OR类别ID = OR类别ID = OR类别ID = OR =类别ID????? OR categoryid =?“

我看不出有什么问题。

任何帮助将不胜感激,

谢谢,尼科

回答

2

典型的,我只要我张贴了这个工作了我自己,没有任何人都好,尽快为他们寻求帮助看到的东西? ?

反正

SELECT ID,名字从productcategories JOIN产品ON productcategories.productid = products.id WHERE类别id =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

本来应该

SELECT productcategories.id,products.name,products.id FROM productcategories JOIN产品ON productcategories.productid = products.id WHERE类别id =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

+0

你不是唯一的一个,如果这可以让你放心的话^^而且你有一个很好的反射,回来给解决方案:-) – 2009-07-21 04:41:50

+0

获得投票回答你自己的问题,通过它thunk它:D – rezzif 2009-07-21 04:49:40

+2

橡皮鸭ftw 。 http://www.c2.com/cgi/wiki?RubberDucking – hobodave 2009-07-21 05:04:48

0

我不认为你真正调用连接对象,而仅仅是mysqli的对象本身的准备。


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

应该仅仅是


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

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

EDIT2:

啊,是的,我明白了。

作为一个侧面说明,你应该考虑混淆你的表:


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=? 
+0

一般情况是,但在这种情况下,$ mysqli是自定义类的对象,其中$ connection是$ mysqli连接。 – 2009-07-21 04:15:13

1

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

相反的:

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

用途:

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

你会让查询更具可读性,并保存在您的应用程序的时间微乎其微金额。 (向MySQL发送更少的数据,PHP中更小的字符串)

+0

嗨,谢谢你,生病了。我认为自己擅长某些事情,事实证明还有很多东西需要学习。我赞成你,但我不会将其标记为接受的答案,因为它不能回答问题。 – 2009-07-21 19:23:41