有人可以告诉我下面这一堆非常简单的SQL代码有什么问题吗? 我正在尝试使用PHP和mysql。
// Create table
$tname=$_POST["appname"];
$creatt="CREATE TABLE $tname
(
AppVersion VARCHAR(30),
AppType VARCHAR(30),
FileName VARCHAR(255),
AppSize FLOAT,
sizetype VARCHAR(30),
apppart FLOAT,
appLRadress VARCHAR(255),
appSRadress VARCHAR(255),
appRadress VARCHAR(255),
apptahye DATE(),
appupload DATE(),
appfenally DATE(),
status CHAR(30),
applearn CHAR(30),
applearnadd VARCHAR(255),
applearnudate DATE(),
learntype VARCHAR(30),
appcrack CHAR(30),
appcrackadd VARCHAR(255),
appcrackdate DATE(),
cracktype CHAR(30)
)";
// Execute query
if (mysqli_query($con,$creatt))
{
echo "Table $tname created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
发生此错误:
创建表时出错:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行的'photoshop(AppVersion VARCHAR(30),AppType VARCHAR(30),FileName VARCHAR'附近使用正确的语法
但是当我使用较少的列时这样:
$tname=$_POST["appname"];
$creatt="CREATE TABLE `$tname`(FirstName CHAR(30),LastName CHAR(30),Age INT)";
它有效!!!!
我的专栏有什么问题?
答案 0 :(得分:0)
检查sql Fiddle Link
http://sqlfiddle.com/#!2/0060c
$tname=addslashes($_POST["appname"]);
$creatt="CREATE TABLE `$tname`
(
AppVersion VARCHAR(30),
AppType VARCHAR(30),
FileName VARCHAR(255),
AppSize FLOAT,
sizetype VARCHAR(30),
apppart FLOAT,
appLRadress VARCHAR(255),
appSRadress VARCHAR(255),
appRadress VARCHAR(255),
apptahye DATE,
appupload DATE,
appfenally DATE,
status CHAR(30),
applearn CHAR(30),
applearnadd VARCHAR(255),
applearnudate DATE,
learntype VARCHAR(30),
appcrack CHAR(30),
appcrackadd VARCHAR(255),
appcrackdate DATE,
cracktype CHAR(30)
);
答案 1 :(得分:0)
显然,不是$tname
而是在SQL字符串中获得"'photoshop"
。所以你应该check and sanitize用户输入。
CREATE TABLE 'photoshop
(
AppVersion VARCHAR(30),
....
cracktype CHAR(30)
);
答案 2 :(得分:0)