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

你真的应该使用 PDO 或 MySQLi 而不是 mysql_* 函数。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 回答