[英]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.