Index: includes/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.inc,v
retrieving revision 1.38
diff -u -F^f -r1.38 database.inc
--- includes/database.inc	5 Feb 2005 00:12:24 -0000	1.38
+++ includes/database.inc	20 Feb 2005 19:12:08 -0000
@@ -129,8 +129,13 @@ function db_set_active($name = 'default'
  *   A string containing an SQL query.
  * @param ...
  *   A variable number of arguments which are substituted into the query using
- *   printf() syntax. Instead of a variable number of query arguments, you may
- *   also pass a single array containing the query arguments.
+ *   printf() syntax. The query arguments can be enclosed in one array instead.
+ *   For INSERT and UPDATE queries the arguments should be present in an 
+ *   array in which the keys name the database columns. For UPDATE queries
+ *   additional parameters can be passed as single arguments after the array.
+ *   Examples:
+ *   db_query('INSERT INTO {node} %a', array('nid' => 42, 'title' => 'foo bar', ...));
+ *   db_query('UPDATE {node} SET %a WHERE nid = %d', array('uid' => 42, 'title' => 'foo bar'), $node->nid);
  * @return
  *   A database query result resource, or FALSE if the query was not executed
  *   correctly.
@@ -139,8 +144,20 @@ function db_query($query) {
   $args = func_get_args();
   $query = db_prefix_tables($query);
   if (count($args) > 1) {
+    if (strpos($query, '%a') !== FALSE) {
+      if (strpos($query, 'INSERT') !== FALSE) {
+        $keys = array_keys($args[1]);
+        $insert = '('. implode(', ', $keys) .') VALUES ('. implode(', ', array_pad(array(), count($keys), "'%s'")) .')';
+        $query = str_replace('%a', $insert, $query);
+      }
+      else if (strpos($query, 'UPDATE') !== FALSE) {
+        $keys = array_keys($args[1]);
+        $update = implode(" = '%s', ", $keys) ." = '%s'";
+        $query = str_replace('%a', $update, $query);
+      }
+    }
     if (is_array($args[1])) {
-      $args = array_merge(array($query), $args[1]);
+      $args = array_merge(array($query), $args[1], array_slice($args, 2));
     }
     $args = array_map('db_escape_string', $args);
     $args[0] = $query;
