2012-05-11 2 views
-1

電子メールアドレスをテーブル名として使用してSQLテーブルを作成しようとしています。電子メールアドレスをタイトルとして持つSQLテーブルを作成する

私が使用していたコードは、次のエラーを生成します。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR' at line 1

と関連するコードは次のとおりです。

// create new table for users tosses 
    // Make a MySQL Connection 
     mysql_connect("localhost", "$sqlusername", "$sqlpassword") or die(mysql_error()); 
     mysql_select_db("$db_name") or die(mysql_error()); 

// Create a MySQL table in the selected database 
     mysql_query("CREATE TABLE $emailaddress(
     id INT NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY(id), 
     name VARCHAR(30), 
     age INT)") 
     or die(mysql_error()); 

ときではない変数$emailaddressから、私は入力値それだけで正常に動作します電子メールアドレスieは@シンボルを持っていませんが、それに@シンボルが含まれているとエラーが表示されます。

+1

テーブル名に使用できる文字は何ですか? RyanPありがとうございます。 – Madbreaks

答えて

8

バックテック( `)でテーブル名をエスケープすると、この問題を回避できるはずです。しかし、実際にはほとんどの場合、これはデータベースを設計するには悪い方法です。

特に必要がない限り、ユーザー/電子メールアドレスごとに新しいテーブルを作成するのではなく、emailaddressフィールドで1つのテーブルを使用する必要があります。

+0

私のサイトでこれが本当に悪い方法であるかどうか考えてもらえますか?電子メールアドレスとパスワードを記録するユーザーのためのメインテーブルが1つあります。各ユーザー名はメールアドレスと同じです。次に、各ユーザーは、自分の名前で作成されたテーブルを取得して、ファイルのアップロードと、ユーザーに関連する約15の関連する変数を追跡します。私はこれは良い設定だと思う。なぜなら、各ユーザーのアカウントには多くのアクティビティ(新しい行が15個程度の変数が入っている)があるからだ。より良いセットアップがありますか?私はこのすべてに新しいです。 – ideasandstuff

0

ここでの問題は、バッククックを使用していないことです。バッククォートを使用すると、より自由に識別子を選択することができます:

CREATE TABLE `$emailaddress` (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(30), age INT) 

はこのについての詳細は、hereを参照してください。

0

それはおそらく

CREATE TABLE emailaddr 
(
    id INT NOT NULL AUTO_INCREMENT, 
    email varchar(50), 
    PRIMARY KEY(id), 
    name VARCHAR(30), 
    age INT, 
    unique key (email) 
); 

私は、これはイベントあなたの中にあるお勧めの理由を次のように一つのテーブルを設計しているためにあなたの利点になりますテーブルにフィールドを追加する必要がある場合は、1つのテーブルを変更するだけです。あなたが使用しているデザインでは、まだ存在しない可能性のあるテーブルをクエリしなければなりません(mysqlがあなたのために行うべきことです)。フィールドを追加する場合は、必要な変更を加えるために何百もの、おそらくは何千ものテーブルを循環させる必要があります。あなたは、このような電子メールアドレスを問い合わせることができ

:あなたのデザインで

SELECT * FROM db_name.emailaddr where email = '$emailaddress'; 

テーブル数が1である場合テーブルは、その後、最初の

SELECT COUNT(1) FROM information_schema.tables 
WHERE table_schema = 'db_name' AND table_name = '$emailaddress'; 

が存在する場合は、あなたがして、チェックしなければなりませんあなたは

SELECT * FROM db_name.`$emailaddress`; 
0
はこれにあなたのコードを変更

できます

// create new table for users tosses 
    // Make a MySQL Connection 
     mysql_connect("localhost", "$sqlusername", "$sqlpassword") or die(mysql_error()); 
     mysql_select_db("$db_name") or die(mysql_error()); 

// Create a MySQL table in the selected database 
     mysql_query("CREATE TABLE `$emailaddress`(
     id INT NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY(id), 
     name VARCHAR(30), 
     age INT)") 
     or die(mysql_error()); 

変数の前後にバックチック "` "が必要です。

関連する問題