User login

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

Searched words: 
error in your SQL syntax near FROM

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • You can use Markdown syntax to format and style the text. Also see Markdown Extra for tables, footnotes, and more.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <blockquote> <small> <h2> <h3> <h4> <h5> <h6> <sub> <sup> <p> <br> <strike> <table> <tr> <td> <thead> <th> <tbody> <tt> <output>
  • Lines and paragraphs break automatically.

More information about formatting options

By submitting this form, you accept the Mollom privacy policy.