2016-10-13 8 views
0

PHPからの変数に基づいてmysqlテーブルを作成しようとしていますが、説明がなくても失敗します。PHP変数からmysqlテーブルを作成

$name = mysql_real_escape_string($_POST['name']); 
mysql_query("CREATE TABLE `".$name."` (name VARCHAR(30), type VARCHAR(30), style VARCHAR(30))"); 

$ name = test;それは動作しますが、それに付随する変数フェッチでは機能しません。

私はthisのリンクを見てきました。彼らはすべてそれがうまくいくと言いますが、私が見ているものからはそうではありません。

更新:

私も以下のコードを試しましたが、そのページはオフラインになります。

$variable=$_POST['name']; 
mysqli_connect("localhost", "devices", "a") or die(mysql_error()); 
mysqli_select_db("devices") or die(mysqli_connect_error()); 
mysqli_query("CREATE TABLE $variable (computer text, mac text, windows text)"); 

私はあなたが名前をきれいにするhtmlspecialchars($_POST['name'],ENT_QUOTES);を使用することができますPHPのバージョン5.5.36

+3

1. PHPから削除されているので、[mysql_ functionsの使用を停止する](http://stackoverflow.com/questions/12859942/why-shouldnt-use-mysql-functions-in-php) 2. MySQLのユーザがCREATE文を実行する権限を持っていますか? – Machavity

+1

説明を表示するコードがないため説明がありません。 mysql_error関数を調べます。また、MySQLを使用していることを指摘されている方々には、古くからあり、MySQLIやPDOではありません。 –

+0

ユーザはcreate文を実行する権限を持っています。 mysql関数の代わりに何を使用することをお勧めしますか? – Number1

答えて

1
:あなたが使用してMySQLiをする予定がある場合

MySQLiをはPHP 5

で提供されています

私は100%理由を正確に理解していませんが、それはすべて下のコード行になります。私は構文チェックを支援するためのNetBeansの上のTextWranglerから切り替えると

$variable=$_POST['name']; 

は、私は、エラーWarning “Do not Access Superglobal $_POST Array Directly”

私はフィルタリングを使用してに切り替えこれにより

と直接解く$ _POST配列にアクセスしていないを得ていたました問題。

$variable=filter_input(INPUT_GET, 'name'); 

別のこととして、私はMySQLが古くなっているため、MySQLiにスワップしました。 Lucas Desouzaに感謝します。

2

を実行していますよ。

また、MySQLが期限切れでもうサポートされていないため、PDOまたはMySQLiを使用する必要があります。

エラー・使用を確認したい場合は、この:

mysql_query("CREATE TABLE `".$name."` (name VARCHAR(30), type VARCHAR(30), style VARCHAR(30))"); 

echo mysql_errno() . ": " . mysql_error() . "\n"; 

更新:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

if ($mysqli->connect_errno) { 
    echo("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

$variable=$_POST['name']; 

if ($mysqli->query("CREATE TABLE $variable (computer text, mac text, windows text)") === TRUE) { 
    echo("Table successfully created.\n"); 
} 
+1

なぜPDOに 'mysqli'を使うのですか? PDOはほとんどあらゆる考えられる方法で優れています。また、任意の '$ _POST'変数を取り込み、それをあなたのクエリで渋滞させたくありません。それは超危険です。 – tadman

+0

@ルーカスそれは動作していないようです。私が言うことから、$変数がmysqli-> query呼び出しにどのように追加されているかを覚えておいてください。私が$を取り出してそれを標準的な言葉にして、それが働くことを話すとき... – Number1

+0

あなたはどんなエラーに戻ってきますか?エラーが表示されない場合は、別の変数にクエリを作成してください。 '$ sql =" CREATE TABLE $変数(コンピュータテキスト、マックテキスト、ウィンドウテキスト) "; それをエコーアウトします。 'echo $ sql;' これは、ここで私が見るためにここに掲載されているものを見ることができます。 エラーがないか、少なくともクエリは誰でも何が間違っているかを推測します。 –

関連する問題