Nesi var bu PHP-MySQL TABLE sorgusu CREATE?

4 Cevap php

Birincisi, ben sadece PHP ile MySQL öğrenmeye başladım.

Benim sorgu kopyalama / benim IDE doğrudan yapıştırın:

$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() );

Bu hata sonuçları:

You have an error in your SQL syntax; near 'show tinyint(1) unsigned NOT NULL default '0' , to varchar(255) N' at line 4

... Bu yüzden show (örneğin showz) bir karakter eklemek ve bu hatayı alıyorum:

You have an error in your SQL syntax; near 'to varchar(255) NOT NULL default '' , from varchar(255) NOT NUL' at line 5

... Bu yüzden to (örneğin toz) bir karakter eklemek ve bu hatayı alıyorum:

You have an error in your SQL syntax; near 'from varchar(255) NOT NULL default '' , type varchar(255) NOT NU' at line 6

... Bu yüzden from (örneğin fromz) bir karakter eklemek ve ÇALIŞIYOR!?

Neler oluyor? Lol

Bu soru çok bariz ise, toplum ihtiyatlı olacağını düşünüyorsa bunu kaldıracağız, ama arada stumped.

BTW, ben herhangi bir başarı olmadan aralık, durum ve diğer şeyler ile berbat ettik.

4 Cevap

SHOW, TO ve FROM MySQL anahtar saklıdır. Onları sütun adları olarak çalışmak için ters tırnakların onları alıntı gerekir:

$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";

Her sütun ismini bunlardan yüzlerce var gibi anahtar kelimeler ile kazara çarpışmaları önlemek için bu şekilde teklif (gereksiz olsa da), genellikle iyi bir uygulamadır. Tam liste için bkz http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html.

Sen this list of reserved words in MySQL statements ilginizi çekebilir. Bir sütun adı (veya herhangi bir yerde sorguları aşağıdaki) gibi bunlardan herhangi kullanmak istiyorsanız Kısacası, genellikle ters tırnakların onları, alıntı var:

`show` TINYINT(1) UNSIGNED NOT NULL,

... Ve daha sonra:

SELECT `show` FROM `varchar` WHERE `to`="France"

Sadece karanlıkta bıçak, ancak mysql saklıdır kelime ve nerelisin? Eğer, toperson terimler veya fromperson değiştirmek mi gibi, [] ve [] adlı veya benzeri [] bu kelimeleri sarın ya?

Bu sorunun cevabı değil, ama gelen cevap "a PHP-MySQL TABLE sorgusu CREATE nesi var?" (Başka bir googler için)

Belki PHP'nin tüm sürümleri bu gibi, ama benim ortamda, sigara PDO ben bir tablo yapmak için deneyin bir hata atar "mysql_query" gibi komutları değil:

CREATE TABLE IF NOT EXISTS `actionlog`

Hata:

You have an error in your SQL syntax

PDO adaptör ile gayet güzel çalışıyor.