2017-11-24 19 views
6

मैं विंडोज पर Drupal 7 के साथ काम कर रहा हूँ, पीएचपी 7 पर, Xampp पर, और अचानक मैं निम्न त्रुटि हो रही शुरू:अपरिभाषित विधि PDOStatement के लिए कॉल :: setFetchMode()

Call to undefined method DatabaseStatementBase::setFetchMode() 

DatabaseStatementBase कहाँ फैली PDOStatement सीधे। जब निम्न न्यूनतम करने के लिए कोड को कम करने:

<?php 
$dbh = new PDO('mysql:host=localhost;dbname=test', 'test', 'test'); 
$pdostatement = $dbh->prepare('SELECT * FROM items WHERE id=?'); 
$pdostatement->setFetchMode(PDO::FETCH_CLASS); 
$success = $pdostatement->execute([1]); 
// do stuff... 

यह अभी भी setFetchMode के बारे में लाइन पर एक त्रुटि फेंकता है। जब मैं उस पंक्ति को टिप्पणी करता हूं, तो कोई त्रुटि नहीं फेंकती है, लेकिन मुझे किसी ऑब्जेक्ट के बजाय एक एसोसिएटिव सरणी मिलती है - न कि क्या ड्रोपल अपेक्षा करता है। खासकर जब से setFetchMode मौजूद होना चाहिए अंत में (देखें http://php.net/manual/en/pdostatement.setfetchmode.php)

, जब मैं तो प्रतिबिंब $pdostatement का उपयोग कर के तरीकों खोजने की कोशिश, मैं नाम से कुछ के लिए कचरा मिल - या, और अधिक सही, नाम लगता है 1.5MB के बारे में लंबे समय तक और इसमें कई अपठनीय पात्र और कुछ विधि नाम शामिल हैं, जैसे कि एक संपूर्ण डीएलएल वहां या कुछ में लोड किया गया था। यहां बताया गया है var_dump (& php7 xdebug) का एक उदाहरण है इसके बारे में बनाना:

object(ReflectionMethod)[17] 
    public 'name' => string '����&������p�aZ������������ ���bindParam�������{�nZ���������������setAttribute����f�kZ����������j����FETCH_ORI_FIRST�a�pZ���������q�� 
    ���CURSOR_SCROLL���l�}Z���������������fetchColumn������zZ��������������wph�����&��������Z���������������debugDumpParams���Z��������.�����children����������Z������������wphX����&��������Z��������(�� 
    ���nextrowset��������Z������������ 
    ���__toString������ ��Z������������wph(����&������4��Z��������'... (length=1752201104) 
    public 'class' => string 'PDOStatement' (length=12) 

कैसे मैं इसे ठीक कर सकते हैं?

+0

अजीब लगता है। कृपया पर्यावरण पर विस्तृत करें - इस्तेमाल किए गए सॉफ़्टवेयर, संस्करण इत्यादि। वर्कअराउंड के रूप में आप हमेशा लाने के बजाय डिफ़ॉल्ट fetch मोड सेट कर सकते हैं या [fetchObject] (https://phpdelusions.net/pdo/objects#fetch) का उपयोग कर सकते हैं() –

+0

इसके अलावा, आपको विधियों को खोजने के लिए प्रतिबिंब की आवश्यकता नहीं है, बस get_class_methods() –

+0

आह का उपयोग करें, ठीक है, 'get_class_methods' yiels एक ही परिणाम। हालांकि, 'fetchObject' का उपयोग वैध कार्यवाही नहीं है - याद रखें, मैं यहां ड्रोपल के साथ काम कर रहा हूं, मुझे कोड का _lot_ बदलना होगा। इसके अलावा, उत्पादन अभी भी काम करता है। –

उत्तर

1

समाधान था: इसे बंद करने की कोशिश करें - इस मामले में अपाचे सर्वर। स्पष्ट रूप से स्मृति में कुछ दूषित हो गया है, और सर्वर को पुनरारंभ करने से इसे ठीक किया गया है।

मुझे लगता है कि कल मेरे कंप्यूटर को बंद कर दिया गया था, समस्या दिखाई देने के बाद, और आज सुबह इसे बूट कर रहा था। अब मुझे पता है: विंडोज 8 और ऊपर एक वास्तविक शटडाउन के बजाय एक हाइब्रिड शटडाउन/हाइबरनेट का उपयोग करें, इसलिए यदि आपको लगता है कि आपने अपने पीसी को पुनरारंभ किया है तो आपकी अपाचे सेवा वास्तव में पुनरारंभ नहीं होती है।

किसी भी तरह से मुझे इतना मूर्ख लगता है ...

+1

क्या आपके पास opcache सक्रिय है? – Wes

+0

मुझे ऐसा लगता है, मेरे 'phpinfo()' आउटपुट में इसके लिए एक पंक्ति है। –

संबंधित मुद्दे