3

我已经搜索过了,也许我正在寻找错误的东西,但我需要以下代码的帮助。我肯定错过了什么...

数据库类:

    class Database {
    private static $link = null;

    private static function dbLink() {
        if(self::$link) {
            return self::$link;
        }

        $dsn = null;

        switch(DB_DRVR) {
            case 'mysql':
                $dsn = DB_DRVR . ":host=" . DB_HOST . ";dbname=" . DB_NAME;
                break;
        }

        self::$link = new PDO($dsn, DB_USER, DB_PASS);

        return self::$link;
    }

    public static function fetchAssoc($sql) {
        $stmt = self::query($sql);
        $result = array();

        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        return $result;
    }

    public static function __callStatic($name, $arguments) {
        $callback = array(self::dbLink(), $name);
        return call_user_func_array($callback, $arguments);
    }
}

返回错误的部分代码:

        $sql = "SELECT group FROM users WHERE username='ryan';";
        $dbSQL = Database::fetchAssoc($sql);

        echo $dbSQL['group'];

数据库设置:

  • id(自动增量,主要)
  • 名称(小文本)
  • 用户名(小文本)
  • 密码(小文本)
  • 盐(小文本)
  • 电子邮件(小文本)
  • 组(小文本)
  • 特权(小文本)

我收到以下错误:

Fatal error: Call to a member function fetch() on a non-object
in C:\public_html\kernel\database.php on line 38

但是奇怪的是,如果我将 SQL 更改为:

$sql = "SELECT * FROM users WHERE username='ryan';";

我没有收到错误,它显示正确,如果我将 SQL 语句更改为:

$sql = "SELECT username FROM users WHERE username='ryan';";

并调用 $dbSQL['username'] 使用上面的函数可以正常工作。

我的问题:当我尝试使用 $dbSQL 数组中的“组”列时,为什么会收到错误消息,但是当我尝试使用“用户名”列时,一切运行正常。我错过了什么?

谢谢,瑞安

4

3 回答 3

4
SELECT `group` FROM users WHERE username='ryan'
于 2012-06-16T14:21:03.020 回答
1

GROUP是 SQL 中的保留关键字,如果使用它,您的查询会产生错误。引用它:

SELECT `group` ...
于 2012-06-16T14:21:47.603 回答
1

在我看来,您的查询好像失败了,因为您的 RDBMS 保留了这个词group

为避免将来出现此类问题:

实施一些错误检查,您会从数据库服务器中看到关于哪个查询失败的线索。有几种方法可以做到这一点:

于 2012-06-16T14:30:08.723 回答