database – SQLSTATE [42000]: error de sintaxis o infracción de acceso (función db_insert)

Pregunta:

Intento construir un nuevo módulo en drupal 7 Intento insertar algunos datos en algún lugar dentro del código, estaba funcionando en muchas funciones, pero de repente cuando trato de hacer lo siguiente

  db_insert('payment_request')
    ->fields(array(
      'payment_item' => $data['payment_item'],
      'change' => $data['change'],
      'via' => $data['via'],
      'userlist' => serialize($userlisthidden),
      'startdate' => strtotime($data['startdate']),
      'enddate' => strtotime($data['enddate']),  
      'hash' => $hash   
    ))->execute();

me da un error

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'change, via, userlist, startdate, enddate, hash) VALUES ('2', '1', '1', 'a:1:{i:' at line 1

Revisé la tabla y los campos y los valores, todo es correcto.

así que decido insertar datos estáticos como los siguientes:

  db_insert('payment_request')
    ->fields(array(
      'payment_item' => 'qq',
      'change' => 'qq',
      'via' => 'qq',
      'userlist' => 'qq',
      'startdate' => 'qq',
      'enddate' => 'qq',  
      'hash' => 'qq'   
    ))->execute();

Pero me da el mismo error, así que lo que extraño aquí, por favor ayúdame.

Respuesta:

CHANGE es una palabra reservada en MySQL. PDO no tiene una función incorporada para citar identificadores (solo cadenas literales y fechas), por lo que presumiblemente Drupal simplemente no ha intentado implementar esto en nombre de PDO.

Usar un nombre de columna diferente sería la solución más simple.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım