您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 'CREATE TABLE v2_session(username varchar(150)DEFAULT''附近,时间 varchar(第2行1'
我错过了什么,代码很简单,我现在很困惑。 这是我的PHP代码:
$con=mysqli_connect("host","user","password","db");
if (mysqli_connect_errno()) {
echo "Error: " . mysqli_connect_error();
}
$sql="
DROP TABLE IF EXISTS v2_session;
CREATE TABLE v2_session (
username varchar(150) DEFAULT '',
time varchar(14) DEFAULT '',
session_id varchar(200) NOT NULL DEFAULT '0',
guest tinyint(4) DEFAULT '1',
userid int(11) DEFAULT '0',
usertype varchar(50) DEFAULT '',
gid tinyint(3) unsigned NOT NULL DEFAULT '0',
client_id tinyint(3) unsigned NOT NULL DEFAULT '0',
data longtext,
PRIMARY KEY (session_id(64)),
KEY whosonline (guest,usertype),
KEY userid (userid),
KEY time (time)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
if (mysqli_query($con,$sql)) {
echo 'Success!';
} else {
echo "Error: " . mysqli_error($con);
}
mysqli_close($con);
答案 0 :(得分:2)
mysqli_query
不允许以分号连接的多个语句。
将查询拆分为两个单独的查询,或者使用语法非常相似的mysqli_multi_query()
。
bool mysqli_multi_query(mysqli $ link,string $ query)
执行一个或多个以分号连接的查询。
mysqli_multi_query
的缺点是它使您的代码对SQL注入更敏感(因为可以注入整个语句),但对于没有参数的静态查询,它不应该导致任何问题。
答案 1 :(得分:1)
这是两个陈述,应该分开执行:
$sql = "DROP TABLE IF EXISTS v2_session";
if (!mysqli_query($con,$sql)) {
echo "Error: " . mysqli_error($con);
exit(1);
}
$sql="
CREATE TABLE v2_session (
username varchar(150) DEFAULT '',
time varchar(14) DEFAULT '',
session_id varchar(200) NOT NULL DEFAULT '0',
guest tinyint(4) DEFAULT '1',
userid int(11) DEFAULT '0',
usertype varchar(50) DEFAULT '',
gid tinyint(3) unsigned NOT NULL DEFAULT '0',
client_id tinyint(3) unsigned NOT NULL DEFAULT '0',
data longtext,
PRIMARY KEY (session_id(64)),
KEY whosonline (guest,usertype),
KEY userid (userid),
KEY time (time)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
if (mysqli_query($con,$sql)) {
echo 'Success!';
} else {
echo "Error: " . mysqli_error($con);
}