Что не так с этим запросом PHP-MySQL CREATE TABLE? - PullRequest
0 голосов
/ 08 января 2010

Во-первых, я только начинаю изучать MySQL с PHP.

Мой запрос скопируйте / вставьте прямо из моей IDE:

$query = "CREATE TABLE IF NOT EXISTS $table_messages (
                id       int(11)        unsigned  NOT NULL  auto_increment,
                show     tinyint(1)     unsigned  NOT NULL  default '0',
                to       varchar(255)             NOT NULL  default '',
                from     varchar(255)             NOT NULL  default '',
                type     varchar(255)             NOT NULL  default '',
                message  varchar(255)             NOT NULL  default '',
                PRIMARY KEY(id)
             ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";

$result = mysql_query( $query, $link ) OR exit ( mysql_error() );

Результатов этой ошибки:

В вашем синтаксисе SQL есть ошибка; около ' покажите tinyint (1) без знака НЕ NULL по умолчанию '0', varchar (255) N ' в строке 4

... поэтому я добавляю один символ к show (например, showz) и получаю эту ошибку:

У вас ошибка в синтаксисе SQL; около ' до varchar (255) NOT NULL по умолчанию '', из varchar (255) НЕ NUL 'в строке 5

... поэтому я добавляю один символ к to (например, toz) и получаю эту ошибку:

В вашем синтаксисе SQL есть ошибка; около от varchar (255) NOT NULL по умолчанию '', введите varchar (255) NOT NU ' в строке 6

... поэтому я добавляю один символ к from (например, fromz), и ЭТО РАБОТАЕТ!?

Что происходит? Лол

Если этот вопрос слишком очевиден, я сниму его, если сообщество решит, что это будет разумно, но пока что я в тупике.

Кстати, я безуспешно перепутал интервалы, регистр и другие вещи.

Ответы [ 4 ]

4 голосов
/ 08 января 2010

SHOW, TO и FROM являются зарезервированными ключевыми словами MySQL. Вы должны заключить их в кавычки, чтобы они работали как имена столбцов:

$query = "CREATE TABLE IF NOT EXISTS $table_messages (
    `id` int(11) unsigned NOT NULL auto_increment,
    `show` tinyint(1) unsigned NOT NULL default '0' ,
    `to` varchar(255) NOT NULL default '' ,
    `from` varchar(255) NOT NULL default '' ,
    `type` varchar(255) NOT NULL default '' ,
    `message` varchar(255) NOT NULL default '' ,
    PRIMARY KEY(id)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";

Обычно хорошей практикой (хотя и не нужно) заключать в кавычки каждое имя столбца таким образом, чтобы предотвратить случайные столкновения с ключевыми словами, поскольку их сотни. Полный список см. http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html.

2 голосов
/ 08 января 2010

Вас может заинтересовать этот список зарезервированных слов в операторах MySQL . Короче говоря, если вы хотите использовать какой-либо из них в качестве имени столбца (или где-либо в следующих запросах), вы должны заключить их в кавычки, обычно в обратных галочках:

`show` TINYINT(1) UNSIGNED NOT NULL,

... и позже:

SELECT `show` FROM `varchar` WHERE `to`="France"
0 голосов
/ 02 февраля 2011

Это не ответ на вашу проблему, но ответ на вопрос "Что не так с PHP-MySQL CREATE TABLE запрос?" (для другого гуглера)

Может быть, не все версии PHP похожи на это, но в моей среде команды, не относящиеся к PDO, такие как "mysql_query", выдают ошибку при попытке создать таблицу:

CREATE TABLE IF NOT EXISTS `actionlog`

Ошибка:

You have an error in your SQL syntax

Отлично работает с адаптером PDO.

0 голосов
/ 08 января 2010

Просто удар в темноте, но есть и зарезервированные слова в mysql? Не могли бы вы обернуть эти слова в [] как [to] и [from] или, как вы, изменили термины на toperson или fromperson?

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