0

我创建了一个基本类Content,用于从 MySQL 数据库中获取内容,构造函数如下:

$this->handle = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

以及一些使用此句柄的方法,主要是获取数据并将其放入数组的方法:

function select($query) {
    $sth = $this->handle->prepare($query);
    $sth->execute();
    $result = $sth->fetchAll();
    $sth->closeCursor();

    return $result;
}

没有什么花哨的,真的。而且效果很好。除了,经过十几个不同的查询之后,fetchAll突然返回一个空结果。当我直接在数据库上运行相同的查询时,我确实得到了一个结果。此外,当我在运行其他查询之前运行查询时,我也会得到一个结果。更奇怪的是fetchAll,我的脚本中的 at this point 过去可以正常工作,但是当它之前的查询越来越多时,它开始返回空结果。

基于这些发现,我假设脚本和数据库都很好,而且很可能与 PDO 有关。最终,我通过从我的类中创建第二个对象来“修复”它,Content以便获取我丢失的数据:

$contentTwo = new Content();

当然,这不应该是必要的!我正在寻找一个真正的解决方案,以及对正在发生的事情的理解。我打开了各种错误报告(PHP、PDO、MySQL),但没有错误。会不会是一些内部 PDO 混淆?是否有最大数量的准备好的语句?任何想法/解决方案将不胜感激。

4

1 回答 1

1

会不会是一些内部 PDO 混淆?

不。

是否有最大数量的准备好的语句?

不。

任何想法/解决方案将不胜感激。

是的。

您面临的问题并不罕见。
每个开发人员每天都必须处理一两次这样的情况。当出现问题时,这对我们的职业来说是很正常的。程序是如此复杂,以至于有时会出错。找出并修复错误是程序员的职责。

所以,你必须调查原因。
为此目的,创建一个全面的日志系统,并在返回空结果的情况下记录您可以保存的所有内容。PDO 对象的状态、输入数据、所有涉及的变量等。

这样你很可能会发现问题

于 2013-08-05T12:07:19.840 回答