2012-02-14 86 views
1

下面是在MySQL中如果不存在CMS和PAGES,应该创建2个新表的代码,但是发生的事情是CMS正在创建,但PAGES被忽略,并且未创建。php无法通过查询创建新的数据库表

这里是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表。

回答

6

你从功能开始第二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... 
+0

所以你说我应该回到他们的人个个被执行。秒我会试试看看它是如何:) – 2012-02-14 21:37:20

+0

好赶上...是的,我错过了... – Umbrella 2012-02-14 21:37:39

+0

@Cl'看到我刚刚添加的代码。 'return'离开了一个函数。只有当你不希望做其他事情时才能调用它。 – 2012-02-14 21:38:13

1

如果您使用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; 
0

变化“的文本的文本,”到文本1文本,它应该工作!记住sql不区分大小写。

1

查询本身似乎没问题,所以有一种解释可能是已经存在页面,或者用户无法创建特定表格。

您可以修改代码,以便它显示了运行查询时什么MySQL服务器说:

result = mysql_query($make_pages); 

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