簡體   English   中英

PHP Mysqli准備不創建語句對象

[英]PHP Mysqli prepared not creating statement object

我正在使用帶有准備好的語句的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; 返回:

“選擇id,從productcategories中命名,在productcategories.productid = products.id上加入產品,在那里categoryid ==或categoryid =?或categoryid =?或categoryid =?或categoryid =?或categoryid =?”

我沒有發現任何問題。

任何幫助將不勝感激,

謝謝,尼科

典型的情況是,我在發布此帖子后立即自己解決了這個問題,請問其他人在尋求幫助后會覺得更好嗎?

無論如何,

SELECT id,name from productcategories在productcategories.productid = products.id上加入產品WHERE categoryid =? 或categoryid =? 或categoryid =? 或categoryid =? 或categoryid =? 或categoryid =?

本來應該

從productcategories中選擇productcategories.id,products.name,products.id在productcategories.productid = products.id上將產品加入JOIN WHERE categoryid =? 或categoryid =? 或categoryid =? 或categoryid =? 或categoryid =? 或categoryid =?

嗨Nico。 這不是您的問題的答案,因為您已經回答了。 只是不請自來的建議。 我不確定該查詢將多久運行一次,或者可以追加多少個類別,但是您可能需要考慮使用WHERE IN語法。

代替:

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

采用:

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

您將使查詢更具可讀性,並在應用程序中節省少量時間。 (向MySQL發送較少的數據,在PHP中發送較小的字符串)

我認為您實際上沒有在連接對象上調用prepare,而只是在mysqli對象本身上調用了prepare。


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

應該只是


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

編輯
結帳第一個示例:
http://php.net/manual/zh/mysqli.prepare.php

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM