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

时间:2011-05-23 06:36:18

标签: 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 );
}

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

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

它会生成像

这样的mysql错误
  

PDOStatement对象::执行()   [pdostatement.execute]:   SQLSTATE [42000]:语法错误或   访问冲突:1064你有一个   SQL语法错误;检查   与您的MySQL对应的手册   用于正确语法的服务器版本   在'group,tag,information)附近使用   价值观('agroup','atag',   'ainformation')'

这是查询

INSERT INTO groups( group ,tag ,information ) VALUES (:group, :tag, :information )

我猜它应该是

INSERT INTO groups( "group" ,"tag" ,"information" ) VALUES (:group, :tag, :information )
我不确定从哪里开始。

感谢您查看

Adam Ramadhan

2 个答案:

答案 0 :(得分:10)

使用反引号引用group

实施例

`group`

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

GROUP BY `id` DESC

...或类似之前。

如果使用> = PHP 5.3 ...

$fieldnames = array_map(function($field) {
    return "`$field`";
}, $fieldnames);

答案 1 :(得分:2)

你在哪里:

  INSERT INTO groups( "group" ,"tag" ,"information" ) ...

你需要:

  INSERT INTO `groups` ( `group` ,`tag` ,`information` ) ...

使用以下方法执行此操作:

  $groups = array('group','tag','information');
  $mysql_groups = '`' . implode('`,`', $groups) . '`';
  $sql = 'INSERT INTO `groups` (' . $mysql_groups . ') ...';