Drupal 7 database FAQ: How do I use the Drupal dbquery function to perform a SQL INSERT? (Or, what is the Drupal 7 dbinsert syntax?)
I didn't type db_query in that question by mistake. I just spent 45 minutes trying to use it for a Drupal 7 SQL INSERT, which of course I've now learned doesn't work.
In short, if you're looking for a Drupal 7 db_insert example that shows how to perform a SQL INSERT, and also happens to show some SQL Timestamp fields, here's a 'submit' function I'm currently writing:
function projects_add_submit($form, &$form_state) { # use t() or check_plain() on these string fields $project = new stdClass(); $project->user_id = get_user_id(); $project->project_count_type = $form_state['values']['type']; $project->name = $form_state['values']['name']; $project->description = $form_state['values']['description']; $timestamp = date('Y-m-d G:i:s'); # new drupal 7 style sql insert $id = db_insert('projects') ->fields(array( 'user_id' => $project->user_id, 'project_count_type' => $project->project_count_type, 'name' => $project->name, 'description' => $project->description, 'last_updated' => $timestamp, 'date_created' => $timestamp # use REQUEST_TIME or time() here if you want the date as a long )) ->execute(); watchdog('sleetmute', "NID = " . $id); $form_state['redirect'] = 'projects'; }
Although I'm not done with my work, that function works properly. For more information related to that db_insert statement, here's the database table it works with:
mysql> desc projects; +--------------------+------------------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+------------------+------+-----+---------------------+-----------------------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | user_id | int(10) unsigned | NO | MUL | NULL | | | project_count_type | varchar(11) | NO | | NULL | | | name | varchar(64) | NO | | NULL | | | description | text | YES | | NULL | | | last_updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | date_created | timestamp | NO | | 0000-00-00 00:00:00 | | +--------------------+------------------+------+-----+---------------------+-----------------------------+
And here's the current Drupal 7 form definition it works with:
function projects_add($form, &$form_state) { $form['description'] = array( '#type' => 'item', '#title' => t('Add a new project count'), ); # the values for the dropdown box $form['type_options'] = array( '#type' => 'value', '#value' => array( 'APPLICATION' => t('Application'), 'ENHANCEMENT' => t('Enhancement'), 'OTHER' => t('Other')) ); $form['type'] = array( '#title' => t('Project Type'), '#type' => 'select', '#description' => "Select the project count type.", '#options' => $form['type_options']['#value'], '#weight' => 10, ); $form['name'] = array( '#type' => 'textfield', '#title' => t('Name'), '#required' => TRUE, '#description' => "Give the project a unique name.", '#size' => 20, '#maxlength' => 20, '#weight' => 20, ); # TODO fix this, should be a textarea $form['description'] = array( '#type' => 'textarea', '#title' => t('Notes/Description'), '#description' => "Any notes you'd like to add about this project.", '#weight' => 30, ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Save', '#weight' => 40, ); return $form; }
It just took me about an hour to work through several different issues here -- mostly a lack of good documentation -- so I hope this will be helpful to anyone else trying to use the new Drupal 7 db_insert function (and understand the correct syntax).