通过从php文本框输入来创建数据库表

时间:2011-10-18 17:47:46

标签: 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(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());
    }
?>

显示错误消息

“您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行使用正确的语法'(id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),firstpublish VARCHA' “  我该如何解决这个问题。

-thankyou。

3 个答案:

答案 0 :(得分:2)

我最好的猜测是你的第一个查询以某种方式重新运行$ tablename的空白值

如果这是一个可公开访问的页面,我会非常小心从用户输入创建表。您也可能希望(至少)通过mysql_real_escape_string()运行$ tablenale并将CREATE TABLE更改为CREATE TABLE IF NOT EXISTS

答案 1 :(得分:0)

错误在于:

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和“(”。

之间添加一个空格

答案 2 :(得分:-1)

<?php

$tablename = $_POST['tablename'];

    // Create a MySQL table in the selected database
    mysql_query("CREATE TABLE $tablename (
    `id` int primary key auto_increment,
    firstpublish VARCHAR(255), 
    descriptions VARCHAR(255))") or die(mysql_error());  
?>