使用变量表名创建mysql表

时间:2012-07-27 15:35:57

标签: mysql

我正在尝试创建一个平台,其中可以从php创建表,并将其命名为提交者键入的变量。我在这里的代码导致mysql语法错误。我认为这是一个括号内的问题,但我试过的每一个组合都没有成功,任何人都可以解决这个问题吗?我已经取出了不正确的括号,以减少混淆

    <?php

if (isset($_POST['submit']))
{ 
$name=$_POST['name'];

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());


mysql_query("CREATE TABLE '$name'(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(30),
age INT)")
or die(mysql_error());  

echo "Table Created!";

?>   <html><form method='POST'>..........</html>

5 个答案:

答案 0 :(得分:2)

在SQL文本中围绕表名使用反引号:

mysql_query("CREATE TABLE `$name`(

反引号是MySQL中标识符的默认分隔符。 (注意:可以启用其他分隔符,但你真的不想去那里。)

如果标识符是保留字,包含空格等,则需要反引号。(在很多情况下可以省略反引号,但在不需要时使用它们并没有错。基本上,请认为规则“始终使用标识符周围的反引号”,并在方便时省略它们,并且您确定它们不是必需的。)

答案 1 :(得分:1)

这可能有效:
    

if (isset($_POST['submit']))
{ 
$name=$_POST['name'];

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());


mysql_query("CREATE TABLE ".$name."(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(30),
age INT)")
or die(mysql_error());  

echo "Table Created!";
}
?>

我已经测试了它,没有问题......它创建了具有这种结构的表。

答案 2 :(得分:0)

更改为:mysql_query("CREATE TABLE ".$name."(

答案 3 :(得分:0)

您没有单引号表名。将它放在后面的刻度线中,这样它就可以处理与保留字或字符匹配的名称。喜欢这个

mysql_query("CREATE TABLE `$name`(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(30),
age INT)")

你也可以不做像sin这样的其他建议答案的反向标记,但如果你不这样做,那就更可靠了;我想首先检查一下MySQL保留字的表名。

答案 4 :(得分:0)

除非您完全信任输入数据,否则验证$ name非常重要 protect against SQL injection