【问题标题】:PostGreSQL CREATE TABLE with PDO PHPPostGreSQL 创建表与 PDO PHP
【发布时间】:2014-06-26 11:14:48
【问题描述】:

我尝试通过执行下面的 createTables 函数在我的 PostgreSQL 数据表中创建一个简单的表:

    public function createTables() {
        try {
            $db = new PDO('pgsql:host='.$this->PARAM_hote.';port='.$this->PARAM_port.';dbname='.$this->PARAM_nom_bd.';user='.$this->PARAM_utilisateur.';password='.$this->PARAM_mot_passe);

            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $sql ='CREATE TABLE IF NOT EXISTS test (id INT(11) AUTO_INCREMENT PRIMARY KEY, prename VARCHAR(50) NOT NULL);';
            $db->exec($sql);
        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    }

但我还有:

testSQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « ( » LINE 1: CREATE TABLE IF NOT EXISTS test (id INT(11) AUTO_INCREMENT P... ^ 

我不知道为什么?...

感谢您的帮助

【问题讨论】:

  • 天哪,本地化的错误信息很糟糕:P
  • 您正在使用 MySQL 语法。不要指望它能在 PostgreSQL 中工作。

标签: php postgresql pdo


【解决方案1】:

postgresql 中没有自动增量。改为使用serial。而integer 类型始终是 4 个字节。

test (id serial PRIMARY KEY,

serial 类型暗示​​带有not null 约束和附加序列的整数。

http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL

【讨论】:

  • 感谢 Clodoaldo Neto,但 $sql ='CREATE TABLE IF NOT EXISTS test (id INT PRIMARY KEY, prename VARCHAR(50) NOT NULL);';工作,但没有自动增量,但 $sql ='CREATE TABLE IF NOT EXISTS test (id INT serial PRIMARY KEY, prename VARCHAR(50) NOT NULL);';返回错误:SQLSTATE [42601]:语法错误:7 ERREUR:erreur de syntaxe sur ou près de « serial » LINE 1: CREATE TABLE IF NOT EXISTS test (id INT serial PRIMARY KEY, ... ^
  • Integer is 4 bytes。 Bigint 是 8 个字节。在 MySQL 中,int(11) 会提示最大显示宽度(11 个字符)。
  • @MikeSherrill'CatRecall' 绝对正确。谢谢。
  • @Macbernie 好的,已修复。
猜你喜欢
  • 2011-09-20
  • 2014-01-07
  • 2012-01-06
  • 2012-03-08
  • 2010-11-28
  • 2013-11-03
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多