我正在尝试创建一个平台,其中可以从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>
答案 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