Must use ->fields() method in select statements in Drupal 7 database layer (DBTNG)
An error like this one:
PDOException: 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 'FROM block block WHERE (theme = 'bartik')' at line 1: SELECT FROM {block} block WHERE (theme = :db_condition_placeholder_0) ; Array ( [:db_condition_placeholder_0] => bartik ) in xray_block_statistics() (line 80 of /home/ben/workspace/dgd7all/sites/default/modules/xray/xray.module).
Probably means the fields() method is missing:
<?php
// short but not sweet
$result = db_select('block')
->condition('theme', $theme)
->execute();
$array = $result->fetchAll();
?>
Not good enough! The asterisk is not assumed. We need to specify that we have fields in this query.
<?php
$result = db_select('block')
->fields('block')
->condition('theme', $theme)
->execute();
$array = $result->fetchAll();
?>
Now that's all set. We can also get a specific field, instead of all of them, with:
->fields('block', array('module'))
Filed issue for Examples modules comments related to this http://drupal.org/node/933526
Comments
Post new comment