【问题标题】:Query returns no result, but returns results when executed manually查询不返回结果,但手动执行时返回结果
【发布时间】:2015-04-10 15:43:12
【问题描述】:

我有一个非常奇怪的问题:当我在数据库上手动执行一个简单的查询时,我得到了预期的结果。当我使用 PHP 脚本运行它时,我没有得到任何结果。

我的代码:

class Database {

    private static function connect() {
        return new PDO("mysql:host=localhost;dbname=db_name", 'db_user', 'db_password');
    }

    public static function findAllCategories() {
        $pdo = Database::connect();

        $stmt = $pdo->prepare("SELECT * FROM categories");
        if (!$stmt) {
            printf("Query failed: %s\n", $pdo->error);
            exit;
        }

        $stmt->execute();
        return $stmt->fetchAll();
    }

}

当我使用Database::findAllCategories() 从脚本调用上面的代码时,它不会产生任何结果,但是当我手动执行查询(使用 phpmyadmin,在 localhost 上运行)时,我会得到该表中的所有类别。

我不知道为什么结果会有所不同。据我所知,没有例外,我 100% 确信查询会在同一台机器和数据库上执行。这可能是什么?

【问题讨论】:

  • 但它返回了什么?如果var_dump(Database::findAllCategories()); 输出什么?
  • 检查是否连接到数据库。如果没有连接到数据库尝试抛出错误
  • 我自己刚刚找到了解决方案,但无论如何感谢您的想法!
  • 如果您认为它适用于其他人,请您添加您的解决方案供其他人查找。如果没有,请发表评论。
  • 我已经添加了答案。

标签: php mysql pdo


【解决方案1】:

当然,一旦您发布问题,您就会很好地了解可能导致问题的原因... :)

似乎我的db_user 不知何故失去了对数据库db_name 的权限。虽然我希望我会得到一个“拒绝访问”异常,但它并没有发生,只是返回了一个空数组。我向用户授予了必要的权限并且它可以工作。

【讨论】:

  • 重点是没有抛出错误,查询只是返回了一个空数组。
  • 查询返回空数组 -> 因为用户没有选择数据库的权限 -> 因为在连接到数据库时错误消息不存在。在第一步本身编码是不好的做法
  • 确实如此,不过我的开发还没有走到这一步。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2010-10-30
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多