2017-03-23 8 views
0

私はPHPを初めて使い、クエリを実行しようとしています。私は関数を作ったgetUserは、ユーザーテーブルからすべてのユーザーを選択します。未知PDOException:列が存在しません

function getUsers() { 
    global $conn; 
    $query = $conn->prepare("SELECT * FROM user ORDER BY userid DESC"); 
    $query->execute(); 

    return $query->fetchAll(); 
} 

私はそれは大文字と小文字を区別することができることを聞いたので、私は問題を避けるために、小文字にすべての私の属性を変更しますが、クエリは名前が何であれ、任意の列を見つけることができません。

session_set_cookie_params(3600, '/~lbaw1641/proto/'); 
session_start(); 


$BASE_DIR = '/home/luiscosta/PhpstormProjects/LBAW-FEUP/'; 
$BASE_URL = 'LBAW-FEUP/'; 

//Connect to the database 

try { 
    $dbuser = 'luiscosta'; 
    $dbpass = '123'; 
    $host = 'localhost'; 
    $dbname = 'lbaw'; 
    $conn = new PDO("pgsql:host=$host;dbname=$dbname", $dbuser, $dbpass); 
}catch (PDOException $e) { 
    echo "Error : " . $e->getMessage() . "<br/>"; 
    die(); 
} 

$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

はここに私のエラートレースです:

#0 /home/luiscosta/PhpstormProjects/LBAW-FEUP/database/users.php(15): PDOStatement->execute() 
#1 /home/luiscosta/PhpstormProjects/LBAW-FEUP/controller/pages/top_scored_users.php(6): getUsers() 
#2 {main} 
    thrown in /home/luiscosta/PhpstormProjects/LBAW-FEUP/database/users.php on line 15 

そして、あなたが見ることができるようにすべて持っている私のuserテーブルDDL、

これは、接続したすべてのエラーを報告していない私のPDO接続です小文字の属性:

CREATE TABLE "user" 
(
    userid INTEGER DEFAULT nextval('user_userid_seq'::regclass) PRIMARY KEY NOT NULL, 
    username VARCHAR(50) NOT NULL, 
    email VARCHAR(70) NOT NULL, 
    password VARCHAR(50) NOT NULL, 
    fullname VARCHAR(200), 
    about VARCHAR(500), 
    website VARCHAR(150), 
    signup_date DATE DEFAULT ('now'::text)::date NOT NULL, 
    last_login TIMESTAMP, 
    locationid INTEGER NOT NULL, 
    roleid INTEGER NOT NULL, 
    CONSTRAINT "FK_user_location" FOREIGN KEY (locationid) REFERENCES location (locationid), 
    CONSTRAINT "FK_user_userRole" FOREIGN KEY (roleid) REFERENCES "userRole" (roleid) 
); 

何が間違っていますか?私が新しくなったので、DB接続が稼動しているかどうかをデバッグして確認する良い方法がありますか? PostgreSQLの

+0

私はuserが予約語だと思います。 "SELECT * FROM \' user \ 'ORDER BY userid DESC"を試してください。それがうまくいくならgoogle "mysql backticks" – bassxzero

+0

@bassxzero userはキーワードですが予約語ではありません。申し訳ありません私が間違っています。私はこれが最初にpostgresqlであることを認識していませんでした。それはpostgresqlで予約されています、 –

+0

'lbaw.user'のようなもの –

答えて

0

userは「現在の実行コンテキストのユーザ名」を返しcurrent_userと同等のシステム情報機能、である(the documentationから引用します)。詳細についてはthis questionを確認することができます。あなたがテーブルを作成するときに、それを引用しなければならなかった理由です

CREATE TABLE "user"の代わりCREATE TABLE user。)

あなたのテーブルからuserid列には、明らかにその関数の戻り値には存在しません。あなたはSELECTクエリで "user"を引用することによってそれを動作させることができるかもしれませんが、最良の解決策はテーブルの名前をデータベースに何かを意味しないものに変更することだと思います。たぶん代わりにusers

関連する問題