在有效语法上抛出MySQL错误

时间:2013-12-04 19:28:07

标签: php mysql

我有一个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')附近使用正确的语法

我一直坐在它上面一个小时,我希望得到一些外部输入来帮助解决这个问题。

2 个答案:

答案 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