通过从php文本框输入创建DB表

通过从php文本框输入创建DB表,php,Php,我想在数据库中创建一个表,通过从文本框中输入该表的名称 <?php $tablename = $_POST['tablename']; // Create a MySQL table in the selected database mysql_query("CREATE TABLE $tablename( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), firstpublish VARCHAR(

我想在数据库中创建一个表,通过从文本框中输入该表的名称

<?php
$tablename = $_POST['tablename'];

    // Create a MySQL table in the selected database
    mysql_query("CREATE TABLE $tablename(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id),
    firstpublish VARCHAR(255), 
    descriptions VARCHAR(255))") or die(mysql_error());  
?>

它生成表和字段,但我不能在其中插入任何数据。当我运行下面的代码时

<?php
$firstpublish = $_POST['firstpublish'];
$descriptions = $_POST['descriptions'];

if(isset($_POST['firstpublish']) || ($_POST['descriptions']))
    {   
$order="INSERT INTO $tablename (id,firstpublish,descriptions) VALUES ('','$firstpublish','$descriptions')";
    $result = mysql_query($order) or die (mysql_error());
    }
?>

我的最佳猜测是,您的第一个查询以某种方式被重新运行,其中$tablename的值为空

如果这是一个可公开访问的页面,我会非常小心地使用用户输入创建表。您可能还希望(至少)通过
mysql\u real\u escape\u string()
运行$tablenale,并将
CREATE TABLE
更改为
CREATE TABLE IF note EXISTS
错误如下:

mysql_query("CREATE TABLE $tablename(
由于将变量混合在带引号的字符串中,因此在其名称后插入空格,因为“$tablename”()是非法名称,很可能会被替换为null,因此MySQL的SQL语句实际上会被视为

CREATE TABLE id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), firstpublish VARCHAR(255), descriptions VARCHAR (255))
这反过来又是一个语法错误


解决方案:在$tablename和“(”)之间添加一个空格(

在不是sql关键字的字段名周围打上一些反勾不会改变任何东西。我不知道这是编写表名查询的正确方法吗?那么我应该怎么做?:(尝试用
if(!empty($\u POST['tablename')){…}包装第一个代码块
对不起,那是什么包装?对不起,请将您的第一个代码块全部放入我在表上方编写的
if()
语句中。正在成功创建该表,但在该表中插入数据的问题。这不起作用,亲爱的莱辛:(在它们之间添加一个空格,但仍然显示该错误。我不知道是否正确地写入表名。:(表正在成功创建,但在该表中插入数据的问题。您得到的错误(即您在此处发布的错误)建议错误在于创建表,而不是插入数据。您真的确定表已创建吗?请尝试在行之间添加一些“虚拟调试代码”,如
print(“您好,我在mysql_查询之前”);
print(“现在我在后面”)
etc,这将为您提供错误发生的确切位置的更好提示。
CREATE TABLE id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), firstpublish VARCHAR(255), descriptions VARCHAR (255))