0

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

5 回答 5

2

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

mysql_query("CREATE TABLE `$name`(

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

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

于 2012-07-27T15:57:27.530 回答
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!";
}
?>

我已经对其进行了测试,没有任何问题......它创建了具有这种结构的表。

于 2012-07-27T15:41:57.883 回答
0

改成 :mysql_query("CREATE TABLE ".$name."(

于 2012-07-27T15:42:04.307 回答
0

您不要单引号表名。将它放在反引号中,以便它可以处理与保留字或字符匹配的名称。像这样

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

您也可以不使用其他建议的答案之类的反引号,但如果您不想先检查表名与一堆 MySQL 保留字,这会更可靠。

于 2012-07-27T15:43:34.547 回答
0

除非您完全信任输入数据,否则验证 $name 以 防止 SQL 注入非常重要。

于 2012-07-27T16:43:23.577 回答