@papaja ने सिर पर कील ठोक दी। आपका पीडीओ कनेक्शन विफल हो गया, इस प्रकार आपके पास तैयार विधि को चलाने के लिए पीडीओ ऑब्जेक्ट नहीं है।
मेरे सिर के ऊपर से, मुझे लगता है कि आप $dsn स्ट्रिंग पर अंतिम उद्धरण खो रहे हैं। आप शायद $this->dbname के बाद और सेमी-कोलन से पहले निम्नलिखित जोड़ना चाहते हैं:
. "'"
यह एक एकल उद्धरण है जो दोहरे उद्धरण चिह्नों में लिपटा हुआ है। मैं DSN स्ट्रिंग बनाने के लिए निम्नलिखित सिंटैक्स का उपयोग करता हूँ:
"mysql:host=$this->HOST;dbname=$this->DATABASE"
वैसे भी, एक परीक्षण फ़ाइल बनाएं ताकि आप जान सकें कि समस्या क्या है। परीक्षण फ़ाइल इस तरह दिखनी चाहिए:
class TestDatabase{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
public function __construct(){
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
}
ध्यान दें कि हम कोशिश पकड़ने वाले ब्लॉक के भीतर पीडीओ ऑब्जेक्ट की तात्कालिकता नहीं चला रहे हैं। जबकि आप कभी नहीं उत्पादन में ऐसा करें, यह आपके परीक्षण के लिए उपयोगी होगा क्योंकि यह आपके कनेक्शन के सभी विवरणों वाला एक घातक अपवाद फेंक देगा।
अब परीक्षण वर्ग को तत्काल करें और आपको प्राप्त होने वाली त्रुटियों को डीबग करके आगे बढ़ें। फिर से, वे पिछली त्रुटि की तुलना में अधिक विस्तृत होंगे क्योंकि यह एक अनकैप्ड पीडीओ अपवाद होगा।