2011-02-23 5 views
0

SQLクエリのテーブル名にvarを含める適切な方法は何ですか?私はmysqlでテーブルを作成するときにvarを正しく組み込む方法

CREATE TABLE `'$username'_table` 

を試みたが、それはただ

'username'_table 

IVEは他の組み合わせ断ち切る試みたが、私はちょうど、私はただ単に

を表示したいスペースや引用符で何かのいずれかを取得しておく作成します
username_table 






function makeUserTable($username) 
      { 
      return mysql_query(" 

    CREATE TABLE `'$username'_table` (
     `userid_id` bigint(255) unsigned NOT NULL AUTO_INCREMENT, 
     `userid` varchar(255) NOT NULL DEFAULT '', 
     `username` varchar(25) NOT NULL DEFAULT '', 
     PRIMARY KEY (`userid_id`) 
    ) 

    "); 
      } 

答えて

2

使用{}

`{$username}_table` 

しかし、ユーザー名に基づいてテーブルを作成することは決して良い考えではありません。たとえば、mySQLのテーブル命名の動作はオペレーティングシステムによって異なります。テーブル名はLinux/Unixでは大文字と小文字が区別され、Windowsでは区別されません。また、許可される文字の範囲はファイルシステムによって異なります。

usernameの列を持つ1つの大きなテーブルを持つことは、通常は非常に優れています。

また、このメソッドはSQLインジェクションに対して脆弱です。このルートを選択する場合は、$usernameを適切に消毒する必要があります。注意:neither mysqli nor PDO can deal with table names as parameters.

+0

だから、MySQLiやPDOのようなラッパーを使うと便利です! –

+2

@Timは本当にありません。 :) [mysqliもPDOもテーブル名をパラメータ化できません](http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-parameter) - 最初は動的テーブル名を持っています –

+0

非常に面白いです。私はそれがなぜサポートされていないのかを知ることができますが、なぜ何人かはそれをやりたいのです。 –

関連する問題