我正在尝试创建一个表,其名称是变量$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'
,从而在代码中获得了它的价值。
任何帮助都会很棒!
答案 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 ;