【问题标题】:PHP PDO mySQL query create table if not existPHP PDO mySQL 查询如果不存在则创建表
【发布时间】:2012-08-19 04:26:01
【问题描述】:

使用 PHP PDO 查询来执行一个 mySQL 查询。查询由从 foreach() 输入的大量信息组成;所以我已经回显了 sql 查询。问题出在这里,但我看不到。

这是$sql的输出

CREATE TABLE IF NOT EXISTS `page` (
  `page_ID` INT AUTO_INCREMENT NOT NULL,
  `url` varchar(200) NOT NULL,
  `title` varchar(200),
  `subtitle` TEXT,
  `content` TEXT,
  `parent` varchar(10),
  `privacy` varchar(1),
  `status` varchar(1),
  `creation` varchar(30)
) CHARACTER SET utf8 COLLATE utf8_general_ci;

仅供参考,查询是这样执行的:

function createdbtable($table,$fields){
    global $fsdbh;
    $sql = "CREATE TABLE IF NOT EXISTS `$table` (";
    foreach($fields as $field => $type){ $sql.= "`$field` $type,"; }
    $sql = rtrim($sql,',');
    $sql .= ") CHARACTER SET utf8 COLLATE utf8_general_ci"; return $sql;
    if($fsdbh->exec($sql) !== false) { return 1; }
}

这是错误:

#1075 - 表定义不正确;只能有一个自动列,并且必须定义为一个键

【问题讨论】:

  • 您是否遇到错误...?你检查了吗?
  • 预期和实际得到什么?
  • #1075 - 表定义不正确;只能有一个自动列,并且必须定义为一个键
  • 列出的问题。 $SQL 已显示

标签: php mysql pdo create-table


【解决方案1】:

您忘记了主键:

CREATE TABLE IF NOT EXISTS `page` (
`page_ID` INT AUTO_INCREMENT NOT NULL,
`url` varchar(200) NOT NULL,
`title` varchar(200),
`subtitle` TEXT,
`content` TEXT,
`parent` varchar(10),
`privacy` varchar(1),
`status` varchar(1),
`creation` varchar(30),
PRIMARY KEY (`page_ID`)) 
CHARACTER SET utf8 COLLATE utf8_general_ci

错误非常明确:

架构创建失败:表定义不正确;只能有一个自动列,并且必须定义为一个键

您必须将自增键指定为键。

编辑:

对于 PHP 代码,我将使用类似的代码:

function createdbtable($table,$fields)
{
    global $fsdbh;

    $sql = "CREATE TABLE IF NOT EXISTS `$table` (";
    $pk  = '';

    foreach($fields as $field => $type)
    {
      $sql.= "`$field` $type,";

      if (preg_match('/AUTO_INCREMENT/i', $type))
      {
        $pk = $field;
      }
    }

    $sql = rtrim($sql,',') . ', PRIMARY KEY (`'.$pk.'`)';

    $sql .= ") CHARACTER SET utf8 COLLATE utf8_general_ci";
    if($fsdbh->exec($sql) !== false) { return 1; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多