2009-07-21 43 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