2017-11-24 5 views
6

私はWindows上でXAMPP上で、PHP 7に、Drupalの7で働いている、と突然、私は次のエラーを取得を開始:コール::はsetFetchMode()

DatabaseStatementBaseはPDOStatementにを拡張
Call to undefined method DatabaseStatementBase::setFetchMode() 

直接。次最小限にコードを削減する場合:

<?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に関する行にエラーがスローされます。私がその行をコメントアウトすると、エラーはスローされませんが、オブジェクトの代わりに連想配列が得られます - drupalが期待するものではありません。 setFetchModeが存在しなければならない、特に以来、私はその後、$pdostatement用いた反射法を見つけようとしたとき、私は名前のいくつかのためにゴミを取得し、最後に

http://php.net/manual/en/pdostatement.setfetchmode.phpを参照) - または、より正確に、名前を約1.5メガバイト長いと思われますあたかもDLL全体が読み込まれたかのように、読みにくい文字やメソッド名の一部が含まれています。ここではそれを作るもの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は同じ結果を返します。しかし、 'fetchObject'を使うことは有効な回避策ではありません。ここではdrupalを使って作業していますので、_lot_のコードを変更する必要があります。その上、生産はまだ機能しています。 –

答えて

1

解決策は次のとおりです。これをもう一度オフにしてみてください。この場合はApacheサーバーです。どうやらメモリ内に何かが壊れていて、サーバを再起動するとそれが修正されました。

私はこの問題が発生した後、昨日私のコンピュータをシャットダウンして、今朝もう一度起動すると、これはすでに完了していると仮定しました。今私は知っている:あなたがあなたのPCを再起動したと思う場合、あなたのapacheサービスは本当に再起動しないように、ウィンドウズ8以上は、実際のシャットダウンの代わりにハイブリッドシャットダウン/休止状態を使用します。

これはどういうわけか、私の気持ちが変わってしまいます。

+1

アクティブなopcacheはありますか? – Wes

+0

私はそう考えています。私の 'phpinfo()'出力には1行あります。 –