php可以';t通过查询创建新的数据库表


php can't create new database tables via query

以下是如果MySQL中不存在CMS和PAGES,则应在其中创建两个新表的代码,但实际情况是CMS正在创建,但PAGES被忽略且未创建。

以下是负责创建表的php函数

private function buildDB() {
#lets create cms table if one does not exist
$make_cms = <<<MySQL_QUERY
            CREATE TABLE IF NOT EXISTS cms (
            title VARCHAR(150),
            bodytext TEXT,
            date VARCHAR(100)
)
MySQL_QUERY;
return mysql_query($make_cms);
#lets create pages table if one does not exist
$make_pages = <<<MySQL_QUERY2
              CREATE TABLE IF NOT EXISTS pages (
              pid int NOT NULL AUTO_INCREMENT, PRIMARY KEY (pid),
              title VARCHAR(150),
              text TEXT,
              date VARCHAR(100)
)
MySQL_QUERY2;
return mysql_query($make_pages);
}

这就是函数。我会再次注意到它的第一部分是有效的,所以$make_cms完成了它的工作,实际上制作了一个名为cms的表,而函数$make_pages什么都不做,无法创建pages表。

您在开始第二个CREATE TABLE语句之前从函数返回。因此,永远不会到达第二个语句。

// Don't return here!
return mysql_query($make_cms);

相反,仅当FALSE:时分配值并返回

$success_cms = mysql_query($make_cms);
// Return only on error of first table creation
if (!$success) {
  return FALSE;
}
// Then create the second table...

如果使用echo mysql_error()输出错误,它会告诉您。我想这是因为您有一个名为text的字段,这是一个保留字。请尝试用tics(`)转义字段名或避免使用保留字。

#lets create pages table if one does not exist
$make_pages = <<<MySQL_QUERY2
          CREATE TABLE IF NOT EXISTS pages (
          `pid` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`pid`),
          `title` VARCHAR(150),
          `text` TEXT,
          `date` VARCHAR(100)
)
MySQL_QUERY2;

查询本身似乎还可以,因此一种解释可能是页面已经存在,或者用户不知何故没有创建该特定表的权限。

您可以修改代码,使其显示MySQL服务器在运行查询时所说的内容:

result = mysql_query($make_pages);
if (!$result) {
    echo('Invalid query: ' . mysql_error());
}

将"text text"更改为text1 text,应该可以了!请记住,sql不区分大小写。