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

时间:2017-11-24 09:23:52

标签: php pdo drupal xampp

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

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

最后,当我尝试使用反射找到$pdostatement的方法时,我会为某些名称获取垃圾 - 或者更准确地说,名称似乎长约1.5MB且包含许多不可读的内容字符和一些方法名称,就像在那里加载了整个DLL一样。以下是var_dump(php7&amp; 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)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

解决方案是:尝试将其关闭再打开 - 在这种情况下是Apache服务器。显然内存中的内容已损坏,重新启动服务器修复了它。

我认为在问题出现后我昨天关闭了我的电脑,并且今天早上又重新开机了。现在我知道:Windows 8及更高版本使用混合关闭/休眠而非实际关闭,因此如果您认为重新启动PC,则无法重启您的apache服务。

不知怎的,这让我感到很蠢......