PHP Mysqli deyim nesnesi yaratmak değil hazırlıklı

3 Cevap php

Ben hazırlanıp php mysqli uzantısı kullanıyorum, ama bir sorguyu bu sorgu nesnesi yaratmak değil.

İşte kod:

$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();
}

Sorun:

The line if($query = $this->mysqli->connection->prepare($sqlq))
The if() is returning false, and therefore not creating the $query object, and not executing any of the code inside the if.

echo $sqlq; döner:

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

Ben yanlış bir şey görmüyorum ki.

Herhangi bir yardım büyük mutluluk duyacağız,

Teşekkürler, Nico

3 Cevap

Tipik, en kısa sürede ben bu haberi olarak kendimi dışarı çalıştı, herkesten en kısa sürede yardım istemek olarak daha iyi şeyler görmek nedir?

Her neyse,

SEÇ id, adı productcategories DAN productcategories.productid = products.id NEREDE categoryid = ON ürünleri JOIN? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

Olmalıydı

SEÇ productcategories.id, products.name, products.id productcategories DAN productcategories.productid = products.id NEREDE categoryid = ON ürünleri JOIN? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =? OR categoryid =?

Nico Merhaba. Eğer zaten cevap olarak bu soruya bir cevap değildir. Sadece bir istenmeyen öneri. Ben bu sorgu çalıştırmak olacaktır, ya da kaç kategori kendisine eklenmiş olabilir ne sıklıkta emin değilim, ama sözdizimi IN WHERE kullanarak düşünebilirsiniz.

Yerine:

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

Kullanın:

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

Sen sorgular daha okunabilir yapmak ve uygulama zaman bir minik miktarda tasarruf edeceksiniz. (PHP MySQL daha az veri, küçük dizeleri gönderme)

Ben aslında yerine sadece mysqli nesnesinin kendisi bağlantı nesnesi üzerinde hazırlamak çağrı sanmıyorum.

yani


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

Sadece olmalı


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

Edit
Checkout the first example:
http://php.net/manual/en/mysqli.prepare.php

Edit2:

Ahh evet ben görüyorum.

Bir yan not olarak size tabloları aliasing düşünmelisiniz:


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