未捕获的PDOException:列不存在

时间:2017-03-23 16:43:53

标签: php postgresql pdo

我是PHP的新手,我正在尝试进行查询。我创建了一个函数getUser,它可以从用户表中选择所有用户。

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

    return $query->fetchAll();
}

我听说它可能区分大小写,因此我将所有属性更改为小写以避免出现问题,但查询无法找到任何名称的列。

这是我的PDO连接,它连接并且不报告任何错误:

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,你可以看到所有属性都是小写的:

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

你们有什么问题吗?由于我是新手,有没有更好的方法来调试和检查我的数据库连接是否已启动并运行?

1 个答案:

答案 0 :(得分:0)

在PostgreSQL中,user是一个系统信息函数,相当于current_user,它返回“当前执行上下文的用户名”(引自the documentation。)你可以检查{{ 3}}了解更多细节。

这就是为什么你必须在创建表格时引用它(CREATE TABLE "user"而不是CREATE TABLE user。)

表中的userid列显然不存在于该函数的返回中。您可以通过在SELECT查询中引用“user”来使其工作,但我认为最好的解决方案是将表的名称更改为对数据库没有任何意义的内容。也许users代替?