我试图一次构建到新的mysql表:
public function connect() {
mysql_connect($this->host,$this->username,$this->password) or die("Could not connect. " . mysql_error());
mysql_select_db($this->table) or die("Could not select database. " . mysql_error());
return $this->buildDB();
}
private function buildDB() {
$sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS projects (
title VARCHAR(300),
projectid VARCHAR(100)
)
CREATE TABLE IF NOT EXISTS owners (
projectid VARCHAR(100),
owners VARCHAR(150)
)
MySQL_QUERY;
return mysql_query($sql);
}
这可能是一个新手问题,但我很难理解为什么这不起作用 - 任何想法?
编辑:已更新,以纳入@mellamokb关于拆分查询的想法
private function buildDB() {
$sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS projects (
title VARCHAR(300),
tags VARCHAR(390),
description TEXT,
created VARCHAR(100),
projectimg VARCHAR(150),
savethumb VARCHAR(150),
owners VARCHAR(150),
projectid VARCHAR(100),
projecturl VARCHAR(150)
);
CREATE TABLE IF NOT EXISTS owners (
projectid VARCHAR(100),
owners VARCHAR(150)
)
MySQL_QUERY;
$arr = split(";", $sql);
foreach($arr as &$value) {
return mysql_query($value);
}
因此,我使用split更新了原始问题,然后使用foreach语句更新了每个'CREATE TABLE'。不幸的是,只创建了第一个表(项目)。任何想法可能会发生什么
答案 0 :(得分:2)
mysql_query
无法在一次调用中运行多个语句:(强调我的)
mysql_query()发送一个唯一的查询(多个查询不是 支持)到服务器上当前活动的数据库 与指定的link_identifier相关联。
您需要将语句拆分为对mysql_query
的单独调用,或者使用mysqli
库和mysqli_multi_query
代替。
如果您使用mysql_query
进行拆分查询路由,一种简单的方法是在单个脚本中正常终止;
语句,然后运行PHP命令进行拆分围绕;
(例如split
或explode
)。然后循环遍历每个输出字符串并一次执行一个。
编辑:关于您的更新:您需要将return
语句移到循环底部之外,否则它会在第一次查询后立即返回到函数的调用者。
相关的SO问题(如果您尝试,可以find with Google显着,不是吗):
答案 1 :(得分:1)
这是你在那里运行的2个查询,据我所知,只有MySQLi支持多个查询。你应该看看http://php.net/mysqli