调用未定义的方法PDOStatement :: setFetchMode()

Daa*_*mer 6 php xampp pdo drupal

我在PHP 7上使用drupal 7,在Windows上的Xampp上工作,突然间我开始收到以下错误:

Call to undefined method DatabaseStatementBase::setFetchMode()
Run Code Online (Sandbox Code Playgroud)

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...
Run Code Online (Sandbox Code Playgroud)

它仍会在有关setFetchMode的行上引发错误.当我对该行进行注释时,不会抛出任何错误,但是我得到了一个关联数组而不是一个对象 - 而不是drupal所期望的.特别是因为setFetchMode应该存在(参见http://php.net/manual/en/pdostatement.setfetchmode.php)

最后,当我尝试找到$pdostatement使用反射的方法时,我得到一些名称的垃圾 - 或者更确切地说,名称似乎长约1.5MB并且包含许多不可读的字符和一些方法名称,好像整个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)
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Daa*_*mer 1

解决方案是:尝试将其关闭然后再次打开 \xe2\x80\x94 在本例中是 Apache 服务器。显然内存中的某些内容已损坏,重新启动服务器即可修复它。

\n\n

我认为这已经是通过我昨天在问题出现后关闭计算机并在今天早上重新启动它来完成的。现在我知道:Windows 8 及更高版本使用混合关闭/休眠而不是真正的关闭,因此如果您认为重新启动了 PC,您的 apache 服务不会真正重新启动。

\n\n

不知何故,这让我感觉自己很愚蠢......

\n