用php一次构建2个新表

时间:2011-10-07 00:30:43

标签: php mysql

我试图一次构建到新的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'。不幸的是,只创建了第一个表(项目)。任何想法可能会发生什么

2 个答案:

答案 0 :(得分:2)

根据文档,

mysql_query无法在一次调用中运行多个语句:(强调我的)

  

mysql_query()发送一个唯一的查询(多个查询不是   支持)到服务器上当前活动的数据库   与指定的link_identifier相关联。

您需要将语句拆分为对mysql_query的单独调用,或者使用mysqli库和mysqli_multi_query代替。

如果您使用mysql_query进行拆分查询路由,一种简单的方法是在单个脚本中正常终止;语句,然后运行PHP命令进行拆分围绕;(例如splitexplode)。然后循环遍历每个输出字符串并一次执行一个。

编辑:关于您的更新:您需要将return语句移到循环底部之外,否则它会在第一次查询后立即返回到函数的调用者。


相关的SO问题(如果您尝试,可以find with Google显着,不是吗):

答案 1 :(得分:1)

这是你在那里运行的2个查询,据我所知,只有MySQLi支持多个查询。你应该看看http://php.net/mysqli