[英]Implementing a Shared Prepared SQL statement in PHP
我正在編寫一個包含通過查詢數據庫生成的其他對象數組的類。 這個類的每個實例都運行一個幾乎相同的查詢,所以我的想法是設置一個共享的預處理語句處理程序,每個類只是將一個不同的變量綁定到它。 這是代碼片段:
class CQuestion
{
// this is line 16
static private $sthAns = SPDO::prepare(
'SELECT * FROM answers WHERE answers.q_id = :qid'
);
// constructor, other functions, etc.
private function GetAnswers()
{
self::$sthAns->bindParam(':qid', $this->m_iQID, PDO::PARAM_INT);
self::$sthAns->execute();
}
}
我知道這不起作用,因為我收到以下錯誤:
解析錯誤:語法錯誤,第16行的C:\\ xampp \\ htdocs \\ mbtest \\ CQuestion.php中出現意外的'(',期望為','或';'
有誰知道一種實現此方法的方法,而不必為該類的每個實例重置准備好的語句?
在我自己的單例(SPDO)中包含PDO的任何混淆都是通過ini文件設置自己的。 這就是為什么我通過靜態引用訪問准備。
在實例化對象/類屬性時,不能調用方法。 您需要為此使用構造函數/初始化程序。 嘗試這樣的事情:
class CQuestion
{
private static $sthAns;
private static function getSthAns()
{
if (!isset(self::$sthAns)) self::$sthAns = SPDO::prepare(
'SELECT * FROM answers WHERE answers.q_id = :qid'
);
return self::$sthAns;
}
private function GetAnswers()
{
self::getSthAns()->bindParam(':qid', $this->m_iQID, PDO::PARAM_INT);
self::getSthAns()->execute();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.