2017-03-23 5 views
0

Ich bin neu in PHP und ich versuche, eine Abfrage zu tun. Ich habe eine Funktion getUser thats alle Benutzer aus der Benutzertabelle ausgewählt.Uncaught PDOException: Spalte existiert nicht

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

    return $query->fetchAll(); 
} 

Ich habe gehört, dass es Fall empfindlich sein kann, damit ich alle meine Attribute geändert Fall zu senken, um Probleme zu vermeiden, aber die Abfrage jede Spalte nicht finden können, was auch immer der Name.

Das ist mein PDO-Verbindung, die Fehler verbindet und die Berichterstattung nicht:

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); 

Hier ist mein Fehler-Trace:

#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 

Und meine user Tabelle DDL, die, wie Sie alle sehen können hat der Attribute in Kleinbuchstaben:

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) 
); 

Haben Sie eine y Idee was ist los? Da ich neu bin, gibt es einen besseren Weg zu debuggen und zu überprüfen, ob meine DB-Verbindung läuft und läuft?

+0

Ich glaube, Benutzer ist ein reserviertes Wort. Versuchen Sie "SELECT * FROM \ 'Benutzer \' ORDER BY Benutzer-ID DESC ". Wenn es funktioniert, google "mysql backticks" – bassxzero

+0

@bassxzero Benutzer ist ein Schlüsselwort, aber kein reserviertes Wort. Entschuldigung, ich habe Unrecht. Ich wusste nicht, dass dies zuerst postgresql war. Es ist in postgresql reserviert, –

+0

So etwas wie 'lbaw.user' –

Antwort

0

In PostgreSQL, user ist eine Systeminformationsfunktion, das entspricht current_user, die die „Benutzername des aktuellen Ausführungskontextes“ zurückgibt (von the documentation zitiert.) Sie this question um weitere Informationen zu überprüfen.

Deshalb sollten Sie es hatte zu zitieren, wenn Sie die Tabelle erstellen (CREATE TABLE "user" statt CREATE TABLE user.)

Die userid Spalte aus Ihrer Tabelle nicht vorhanden ist offensichtlich nicht in der Rückkehr dieser Funktion. Sie können es vielleicht durch die Angabe von "user" in Ihrer SELECT-Abfrage zum Laufen bringen, aber ich denke, die beste Lösung besteht darin, den Namen der Tabelle einfach in etwas zu ändern, was Ihrer Datenbank nicht schon etwas bedeutet. Vielleicht users stattdessen?

Verwandte Themen