3

変数内に格納されているものの値を名前とするテーブルを作成しようとしています$name。私はさまざまな方法を試しましたが、どれもうまくいかないようです。現在使用しているコードは次のとおりです。

 mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
 mysql_select_db("peltdyou_orders") or die(mysql_error()); 
 mysql_query("CREATE TABLE '" .$_POST['name']. "' ( name VARCHAR(30), age INT, car VARCHAR(30))");

私はそれが何かと関係があることを知っていますが'" .$_POST['name']. "'、私は何を理解することができません。'$name'私は、コードのさらに上からその値を取得する代わりに試しました。

どんな助けでも素晴らしいでしょう!

4

6 に答える 6

8

引用符ではなく、テーブル名の前後にバッククォートを使用します。そして、入力をエスケープします!また、これはローカルホストで機能しますが、本番サーバーで実行しているユーザーがテーブルを作成する権限を持っていることを確認してください(通常、共有ホスティングではAFAIKではありません)。

警告の言葉:ユーザー入力でテーブルを作成してもよろしいですか?この方法でいくつのテーブルを作成しますか?代わりにを挿入するように全体を再設計することはできませんか?

$name = mysql_real_escape_string($_POST['name']);
mysql_query("CREATE TABLE `".$name."` ( name VARCHAR(30), age INT, car VARCHAR(30))");
于 2012-06-12T19:50:46.013 に答える
1

別の変数に入れると機能します。POST変数とmysql_queryの「'」文字との競合があります。

<?php
mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
mysql_select_db("peltdyou_orders") or die(mysql_error()); 
$name = mysql_real_escape_string($_POST['name']);
mysql_query("CREATE TABLE '$name' ( name VARCHAR(30), age INT, car VARCHAR(30))");
?>

私はあなたのコードであなたを助けるためにこのコードを投稿しました、しかしあなたはmysql_*関数を使うべきではありませんあなたはmysqli_*関数を使うべきです。あなたはここでそれらについてもっと読むことができます:http: //php.net/manual/en/book.mysqli.php

于 2012-06-12T19:48:53.550 に答える
1

実際には、mysql_*関数の代わりにPDOまたはMySQLiを使用する必要があります。mysql_ *関数は非推奨化の過程にあり、セキュリティホールでいっぱいです。

そうは言っても、テーブル名を引用する必要はなく、代わりに何も使用しないか、バッククォートを使用する必要があります。

于 2012-06-12T19:59:33.010 に答える
0

最新のMysqliコネクタを使用すると、次のようなことができます。1.次のようにユーザーの入力から変数を作成します$variable=$_POST['name'] 。2。以下の完全なコードに示すように、クエリで変数を使用します。

$variable=$_POST['name']; mysqli_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); mysqli_select_db("peltdyou_orders") or die(mysqli_connect_error()); mysqli_query("CREATE TABLE $variable ( name VARCHAR(30), age INT, car VARCHAR(30))");

于 2013-07-29T04:38:25.913 に答える
0
$query = "CREATE TABLE $name" . '(
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    age INT,
    name  varchar(30),
    car VARCHAR(30)
)';
于 2016-12-01T10:04:19.700 に答える
0
CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `description` text NOT NULL,
  `price` double NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
于 2018-09-04T07:35:55.883 に答える