php + mysql的问题(字段名"group")

Ada*_*han 1 php mysql pdo

public function insert($table, $data = array()) {
    $fieldnames = array_keys ( $data );
    var_dump(implode ( ' ,', $fieldnames ));
    $name = '( ' . implode ( ' ,', $fieldnames ) . ' )';
    $value = '(:' . implode ( ', :', $fieldnames ) . ' )';
    $query = "INSERT INTO $table";
    $query .= $name . ' VALUES ' . $value;
    var_dump($query);
    $insert = $this->start->prepare ( $query );
    return $insert->execute ( $data );
}
Run Code Online (Sandbox Code Playgroud)

问题:好的,我有一个功能,可以帮助我简化插入语句(pdo)问题是当我插入一个字段,如果"组"名称在上面

$a['group'] = $_POST['group'];
$a['tag'] = $_POST['tag'];
$a['information'] = $_POST['information'];
$status= $this->insert ( 'groups', $a);
Run Code Online (Sandbox Code Playgroud)

它会生成像mysql这样的错误

PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在"组,标签,信息"附近使用正确的语法VALUES('agroup','atag','ainformation')'

这是查询

INSERT INTO groups( group ,tag ,information ) VALUES (:group, :tag, :information )
Run Code Online (Sandbox Code Playgroud)

我猜它应该是

INSERT INTO groups( "group" ,"tag" ,"information" ) VALUES (:group, :tag, :information )
Run Code Online (Sandbox Code Playgroud)

我不知道我们应该从哪里开始.

谢谢你的关注

亚当拉马丹

ale*_*lex 10

group用反引号引用.

`group`
Run Code Online (Sandbox Code Playgroud)

group是SQL中的保留字.你可能用过......

GROUP BY `id` DESC
Run Code Online (Sandbox Code Playgroud)

......之前......

如果使用> = PHP 5.3 ...

$fieldnames = array_map(function($field) {
    return "`$field`";
}, $fieldnames);
Run Code Online (Sandbox Code Playgroud)