SQL Создать несколько таблиц одновременно - PullRequest
1 голос
/ 07 января 2012

Мне нужно создать несколько таблиц одновременно.Мне трудно найти правильный метод для достижения этой цели.В настоящее время мой скрипт выглядит следующим образом:

  private function buildDB() {
    $sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)
MySQL_QUERY;

    return mysql_query($sql);
  }

Очевидно, это не работает, и таблицы не создаются.Есть ли простой способ создания нескольких таблиц одновременно?

Ответы [ 3 ]

4 голосов
/ 07 января 2012

MySQL запутывается, потому что вы не разграничиваете свои запросы.Добавьте точку с запятой после первого оператора CREATE:

private function buildDB() {
    $sql = <<<MySQL_QUERY
        CREATE TABLE IF NOT EXISTS headings (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100)
        );

        CREATE TABLE IF NOT EXISTS titles (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100)
        )
MySQL_QUERY;

    return mysql_query($sql);
}

Кроме того, убедитесь, что MySQL_QUERY находится в начале строки без других символов, кроме, возможно, точки с запятой ,согласно документации Heredoc .


Поскольку приведенное выше не работает, попробуйте этот код:

private function buildDB() {
    $sql1 = "CREATE TABLE IF NOT EXISTS headings (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100))";

    $sql2 = "CREATE TABLE IF NOT EXISTS titles (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100))";
MySQL_QUERY;

    return mysql_query($sql1) && mysql_query($sql2);
}

You может использовать mysqli_multi_query() (версия MySQL не существует), но тогда вам придется использовать MySQLi.Приведенный выше код возвращает логическое И двух запросов, поэтому вы все равно получите 0, возвращенный в случае сбоя.

1 голос
/ 07 января 2012

Вы можете выдавать несколько запросов, если они правильно разделены. При выдаче нескольких запросов измените это:

CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

до

CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
); // added a friendly semicolon

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
); // added a friendly semicolon

и вы должны быть установлены.

Если нет, добавьте отладку, чтобы точно определить, где ваш SQL или окружающий код недоволен.

1 голос
/ 07 января 2012

Это потому, что mysql_query () может выполнять только один запрос за раз. Попробуйте вместо этого использовать mysqli :: multi_query () (http://php.net/manual/en/mysqli.multi-query.php), но завершайте запросы точкой с запятой.

Однако самый простой подход заключается в непосредственном запуске операторов CREATE TABLE в вашем клиенте MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...