簡體   English   中英

在PHP中實現共享的預准備SQL語句

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

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