我有一个MySQL错误,我不能为我的生活搞清楚。我在我的网站上成功地多次使用完全相同的代码(尽管从不使用单个列)。有谁看到我做错了什么?
try{
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(!empty($_POST['group'])){
$sql = "INSERT INTO Groups (group) VALUES (:group)";
$query = $conn->prepare($sql);
if($query->execute(array(":group" => $_POST['group']))){
echo 'Successfully created user. <a href="dashboard.php">Go back to admin page</a>';
}
else{
echo 'Something went wrong. Contact the Admin. <a href="dashboard.php">Go back to admin page</a>';
}
}
else{
echo 'Group cannot be empty. <a href="dashboard.php">Go back to admin page</a>';
}
}
catch(PDOException $e){
echo $e->getMessage();
}
我得到的错误是:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的“组”VALUES('as12')附近使用正确的语法
我一直坐在它上面一个小时,我希望得到一些外部输入来帮助解决这个问题。
答案 0 :(得分:3)
你不能在查询中使用MySQL reserved words(其中group
是一个)作为标识符(列,表等)如果你想使用这样的单词,你必须用反引号包装它
INSERT INTO Groups (`group`) VALUES (:group)
答案 1 :(得分:0)
组是reserved word。你可以把它放在反引号中,但一般来说你应该尽量避免使用保留字作为列名。
最好的方法是修改架构,将列名更改为group_name或其他内容。
ALTER TABLE Groups CHANGE `group` group_name VARCHAR(100); -- must repeat old column spec