проблема с php + mysql (имя поля "группа") - PullRequest
1 голос
/ 23 мая 2011
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), проблема в том, когда я вставляю поле, если имя "group" на нем

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

сгенерирует ошибку MySQL вроде

PDOStatement :: Execute () [Pdostatement.execute]: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверить руководство, которое соответствует вашему MySQL версия сервера для правильного синтаксиса использовать рядом с группой, тегом, информацией) ЦЕННОСТИ («группа», «атаг», 'информация') '

это запрос

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

я предполагаю, что это должно быть

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

Я не уверен, с чего начать.

Спасибо, что заглянули в

Адам Рамадан

Ответы [ 2 ]

10 голосов
/ 23 мая 2011

Цитировать group с обратными галочками.

Пример

`group`

group - зарезервированное слово в SQL.Возможно, вы использовали ...

GROUP BY `id` DESC

... или аналогичные ранее.

При использовании> = PHP 5.3 ...

$fieldnames = array_map(function($field) {
    return "`$field`";
}, $fieldnames);
2 голосов
/ 23 мая 2011

Где у вас есть:

  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 . ') ...';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...