2017-11-24 236 views
6

:Çağrı :: setFetchMode() Windows üzerinde Xampp üzerinde, PHP 7, drupal 7 ile çalışıyorum ve bir anda aşağıdaki hatayı başlıyorsun

Call to undefined method DatabaseStatementBase::setFetchMode() 

DatabaseStatementBase PDOStatement uzanır direkt olarak. Aşağıdaki minimuma kodu azaltarak zaman:

<?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... 

Hala setFetchMode ilişkin satırda hata verir. Bu satırı yorumladığımda, hiçbir hata atılmaz, ancak bir nesne yerine ilişkisel bir dizi alıyorum - drupalin beklediği gibi değil. setFetchMode bulunmalıdır Özelliklede Sonra $pdostatement kullanarak yansıma yöntemleri bulmaya çalıştığımda isimlerin bazıları için çöp olsun, Nihayet

(http://php.net/manual/en/pdostatement.setfetchmode.php bakınız) - ya da daha doğru, adı yaklaşık 1,5 MB uzun görünüyor ve bir sürü DLL okunmış gibi bir sürü okunamaz karakter ve yöntem isimleri içerir. İşte ondan ne var_dump (& php7 Xdebug) bir örnek:

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) 

Bunu nasıl düzeltebilirim?

+0

garip geliyor. Lütfen çevreyi - kullanılan yazılımları, sürümleri, vb. Detaylandırın. Bir geçici çözüm olarak her zaman varsayılan getirme modunu ayarlayabilir veya getirme() –

+0

yerine [fetchObject] (https://phpdelusions.net/pdo/objects#fetch) kullanabilirsiniz. Ayrıca, yöntemleri bulmak için yansıma gerekmez, sadece get_class_methods() kullanın –

+0

Ah, sağ, get_class_methods' aynı sonucu verir. Ancak, 'fetchObject' kullanmak geçerli bir geçici çözüm değildir - unutmayın, burada drupal ile çalışıyorum, kodun bir kodunu değiştirmek zorundayım. Ayrıca üretim hala devam ediyor. –

cevap

1

Çözüm şu oldu: kapatıp tekrar açmayı deneyin - bu durumda Apache sunucusu. Anlaşılan bir şey anılarda bozulmuştur ve sunucuyu yeniden başlatmak onu düzeltmiştir.

Bu sorunun, bilgisayarımın dün kapatılmasından, problemin ortaya çıkmasından ve bu sabah tekrar tekrar başlatılmasından önce yapıldığı varsayıldım. Şimdi biliyorum: Windows 8 ve üstü, gerçek bir kapatma yerine bir hybrid shutdown/hazırda bekletme kullanın, bu yüzden PC'nizi yeniden başlattığınızı düşünüyorsanız, apache hizmetiniz gerçekten yeniden başlatılamaz.

Her nasılsa bu beni çok aptal hissettiriyor ...

+1

opcache aktif var mı? – Wes

+0

Sanırım, phpinfo() 'çıkışımda bunun için bir satır var. –