用PHP变量创建MySQL表

时间:2012-06-12 19:46:36

标签: php mysql

我正在尝试创建一个表,其名称是变量$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',从而在代码中获得了它的价值。

任何帮助都会很棒!

7 个答案:

答案 0 :(得分:8)

围绕表名使用反引号,而不是引号。逃避输入!此外,虽然这适用于localhost,但请确保在生产服务器上运行的用户具有特权来创建表(当然,通常不是,AFAIK,在共享主机上)。

一句警告:你真的确定要在用户输入上创建一个表吗?你要以这种方式创建多少个表?难道你不能重新设计整个事情,以便插入 吗?

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

答案 1 :(得分:2)

将它放在另一个变量中它会起作用,与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

答案 2 :(得分:1)

 mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
 mysql_select_db("peltdyou_orders") or die(mysql_error()); 

 //prevent injection:
 $name = mysql_real_escape_string($name);

 $query = <<<SQL
CREATE TABLE `{$name}` (name VARCHAR(30), age INT, car VARCHAR(30));
SQL; 

if ( mysql_query($query) ) {
 //success
} else {
 //error
}

答案 3 :(得分:1)

你应该使用PDO或MySQLi而不是mysql_ *函数。 mysql_ *函数正在被弃用,它们充满了安全漏洞。

用它表示你不需要引用你的表名,而是不应该使用任何东西或反引号。

答案 4 :(得分: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))");

答案 5 :(得分:0)

$query = "CREATE TABLE $name" . '(
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    age INT,
    name  varchar(30),
    car VARCHAR(30)
)';

答案 6 :(得分: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 ;