2009-07-21 19 views
0

PHP mysqli拡張をプリペアドステートメントで使用していますが、1つのクエリではクエリオブジェクトを作成していません。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オブジェクトを作成しない、内部コードのいずれかを実行していない。ここで

コードでありますif。

echo $sqlq;リターン:????製品のリストFROM

は、「IDを選択し、名前はproductcategories.productid = products.id WHERE区分コード= OR区分= OR区分= OR区分= OR区分= ONの製品を登録しようか! OR categoryid =? "

私には何も間違いはありません。

任意の助けをいただければ幸いです、

おかげで、ニコ

答えて

2

典型的な、私は、誰がより良いとすぐに助けを求めるようなものを見ないようにすぐに私はこれを掲示として自分自身をそれを働きましたか? ?製品のリストFROM

とにかく

SELECT ID、名前がproductcategories.productid = products.id WHERE区分コード= ONの製品を登録しようか! OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

productcategories.productid = products.id WHERE区分コード= ONの製品は、製品のリストFROM

SELECT productcategories.id、products.name、products.id

に参加されている必要がありますか? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

+0

あなたが唯一の人ではありません^^そして、あなたは優れた反射を得て、解決策を提供するために戻ってきました:-) –

+0

あなた自身の質問に答えるために投票しましたwhoda:D – rezzif

+2

ラバーダッキングftw 。 http://www.c2.com/cgi/wiki?RubberDucking – hobodave

0

私はあなたが実際に、接続オブジェクトではなく、単にmysqliのオブジェクト自体に準備を呼び出すとは思いません。
http://php.net/manual/en/mysqli.prepare.php

EDIT2:

すなわち


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

だけ


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

編集
アウト最初の例でなければなりませんああ、そうだよ。側として

は、あなたのテーブルに別名を検討すべきである点に注意してください。


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接続です。 –

1

ヘイニコ。あなたの質問に対する回答ではありません。すでに回答しています。ちょうど迷惑な提案。私は、どのくらいの頻度でそのクエリを実行するか、またはいくつのカテゴリを追加できるかはよく分かりませんが、WHERE IN構文の使用を検討したいかもしれません。

の代わりに:

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

用途:

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

あなたは、クエリを読みやすくし、アプリケーションに時間の非常に小さい量を節約できます。 (より少ないデータをMySQLに送り、PHPのより小さい文字列)

+0

こんにちは、ありがとう、それを変えてください。私は何かにうまくやっていると思うし、学ぶべきことがはるかにあることが分かった。私はあなたをアップアップしましたが、私はそれを受け入れられた答えとしてマークしません。それは質問に答えないので見ます。 –

関連する問題