我想在数据库中创建一个表,方法是将该表的名称作为文本框的输入。
<?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。
答案 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());
?>