未捕获的PDOException:获取模式需要colno - 但仅在生产服务器上

时间:2011-01-13 03:10:59

标签: php mysql pdo

我一直在将网站从一台服务器迁移到另一台服务器。代码是巨大的,所以我自然而然地遇到了一些问题。我相信他们全都解决了除了这个持久的:

在特定页面上,我收到以下错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: fetch mode requires the colno argument' in /home/username/public_html/admin/lib/database.inc.php:59

引用的行:

$myResult->setFetchMode(PDO::FETCH_COLUMN);

我一直在PDO文档中来回走动,所以我的诊断最初是将获取模式设置为PDO :: FETCH_COLUMN也需要设置列号 - 那里没有很大的推论。所以我尝试将值0作为第二个参数。该页面花费超过30秒加载并获得PHP超时。值为1,然后我认为这不是通向成功的途径。

现在,真正令人困惑的是,这个网站在我的本地测试机器上完美运行,没有任何修改,以及在原始的生产服务器上。我没有轻松访问旧服务器上的规范,但我知道我的本地测试机器的那些与那些新服务器非常接近。

具体做法是:

本地PHP:5.3.3

远程PHP:5.3.4

本地MySQL:5.1.37

远程MySQL:5.0.91

由于我知道代码很好有一些配置,我希望有人知道我可以翻转的魔术开关。

- 编辑 -

即使将error_reporting设置为E_ALL |在本地计算机上的E_STRICT,此PDO异常不会出现。

2 个答案:

答案 0 :(得分:1)

解决。不要问我为什么,但是将PHP降级到特定版本 - 正如原始开发人员所推荐的那样 - 可以解决问题。没关系,它使用更新的版本在本地工作正常。它刚刚起作用。

答案 1 :(得分:-1)

我知道一个老问题,但是我遇到了同样的错误,并以为我会发布发现的内容。我通过使用准备好的语句并将PDO::FETCH_COLUMN传递给fetchAll()来解决了这个问题。

$query = $database->prepare($sql);
$query->execute();
$result = $query->fetchAll(PDO::FETCH_COLUMN);

我不知道为什么会这样,$database->query()却不行。我在这里不需要准备好的语句,因为我没有将任何参数传递给SQL,但是它可以工作,所以我顺其自然。希望对其他有相同错误的人有所帮助。