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(auto_increment、primary)
  • 名前(tinytext)
  • username(tinytext)
  • パスワード(tinytext)
  • salt(tinytext)
  • メール(tinytext)
  • group(tinytext)
  • 特権(tinytext)

次のエラーが発生します。

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配列の「group」列を使用しようとするとエラーが発生しますが、「username」列を使用しようとするとすべて正常に実行されます。私は何が欠けていますか?

ありがとう、ライアン

4

3 に答える 3

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

RDBMSが単語を予約しているため、クエリが失敗しているように聞こえますgroup

将来このタイプの問題を回避するには:

エラーチェックを実装すると、DBサーバーから、どのクエリのどの部分が失敗したかについての手がかりが表示されます。これを行うには、いくつかの方法があります。

  • self::errorInfo() 出力を印刷またはログに記録して、各クエリを実行した後、コードがチェックすることを確認してください。
  • エラーモードをに切り替えますPDO::ERRMODE_EXCEPTIONエラーとエラー処理については、マニュアルページを参照してください。
于 2012-06-16T14:30:08.723 に答える
1

GROUPSQLで予約されたキーワードである場合、それを使用するとクエリでエラーが発生します。引用してください:

SELECT `group` ...
于 2012-06-16T14:21:47.603 に答える