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).

