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
答案 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 . ') ...';