$value) { switch (gettype($value)) { case 'integer': $escape = '%d'; break; case 'double': $escape = '%f'; break; case 'string': $escape = "'%s'"; break; case 'NULL': $escape = 'NULL'; break; default: continue; } $flat_fields[] = $field .'='. $escape; } list($where_string, $where_values) = db_where_clause($where, $where_type); $sql = 'UPDATE {'. $table .'} SET '. implode(',', $flat_fields) . $where_string; return db_query($sql, array_merge($update_values, $where_values)); } /** * Run a delete query on the active database. * * @param $table * The database table on which to run the delete query. * @param $where * The where rules for this delete query. * @param $where_type * Whether to AND or OR the where rules together. * @return * A database query result resource, or FALSE if the query was not * executed correctly. * */ function db_delete($table, $where, $where_type='AND') { list($where_string, $where_values) = db_where_clause($where, $where_type); $sql = 'DELETE FROM {'. $table .'} '. $where_string; return db_query($sql, array_merge($where_string, $where_values)); } /** * Build the WHERE portion of an SQL query, based on the specified values. * * @param $where * Associative array of rules in the WHERE clause. If a key in the array * is numeric, the value is taken as a literal rule. If it is non-numeric, * then it is assumed to be a field name and the corresponding value is the * value that it must hold. * @param $where_type * Whether the values of the WHERE clause should be ANDed or ORed together. * * As an example, this $where clause would be translated as follows: * $where = array('name'=>'foo', 'type'=>'page', 'created < 1147567877') * * WHERE (name='foo') AND ('type'='page') AND (created < 1147567877') * @return * An array containing the where clause with sprintf() markers, and * an array of values to substitute for them. */ function db_where_clause($where, $where_type='AND', $where_keyword=TRUE) { $params = array(); $args = array(); foreach ($where as $key => $value) { if (is_numeric($key)) { $params[] = ' ('. $value .') '; } else { switch (gettype($value)) { case 'double': $escape = '%f'; break; case 'integer': $escape = '%d'; break; case 'string': $escape = "'%s'"; break; case 'NULL': $escape = 'NULL'; break; default: continue; } $params[] = ' ('. $key .'='. $escape .') '; $args[] = $value; } } $return = ''; if (sizeof($params)) { $return = ($where_keyword ? ' WHERE ' : ' ') . implode($where_type, $params); } return array($return, $args); } /** * Returns an array with all objects from a query * Does not do a rewrite sql for you! * Call similar to db_query. */ function db_fetch_all_as_objects($query) { $results = array(); $args = func_get_args(); array_shift($args); $res = db_query($query, $args); while ($row = db_fetch_object($res)) { $results[] = $row; } return $results; } /** * Returns an array with all arrays from a query * Does not do a rewrite sql for you! * Call similar to db_query. */ function db_fetch_all_as_arrays($query) { $results = array(); $args = func_get_args(); array_shift($args); $res = db_query($query, $args); while ($row = db_fetch_array($res)) { $results[] = $row; } return $results; } /** * Returns the first column of a query result as an array. Mirrors new method in the D7 database layer. * * Does not do a rewrite sql for you! * Call similar to db_query(). */ function db_fetch_column($query) { $results = array(); $args = func_get_args(); array_shift($args); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } $res = db_query($query, $args); while ($row = db_fetch_array($res)) { $results[] = current($row); } return $results; } /** * Returns an associative array, with the first column of the result set as the key and the second as the value. * Mirrors new method in the D7 database layer. * * Does not do a rewrite sql for you! * Call similar to db_query(). */ function db_fetch_assoc($query) { $results = array(); $args = func_get_args(); array_shift($args); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } $res = db_query($query, $args); while ($row = db_fetch_array($res)) { $keys = array_keys($row); $results[$row[$keys[0]]] = $row[$keys[1]]; } return $results; }