JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: new input type=email, type=search
[wfpl.git] / db.php
diff --git a/db.php b/db.php
index 4650cb5..6f8b38d 100644 (file)
--- a/db.php
+++ b/db.php
@@ -97,6 +97,7 @@ function db_send_query($sql) {
 # %i  put an integer in the output (strips non-numeric digits, and puts in 0 if blank)
 # %"  output double quotes, surrounding the variable which is encoded to be in there.
 # %s  output encoded to be in double quotes, but don't output the quotes
+# %$  output argument as-is, no encoding. Make sure you quote everything from the user!
 #
 # complex example: db_get_rows('mytable', 'id', 'where name=%" or company like "%%%s%%"', $name, $company_partial);
 
@@ -132,6 +133,8 @@ function _db_printf($str, $args) {
                        $int = format_int(array_shift($args));
                        if($int == '') $int = '0';
                        $out .= $int;
+               } elseif($chr == '$') {
+                       $out .= array_shift($args);
                } else {
                        $out .= $chr;
                }
@@ -256,6 +259,22 @@ function db_insert($table, $columns, $values) {
        
        db_insert_ish('INSERT', $table, $columns, $values);
 }
+
+# like db_insert() above, but instead of passing columns and data separately,
+# you can pass one array with the column names as keys and the data as values
+function db_insert_assoc($table, $data) {
+       $args = func_get_args();
+       $args = array_slice($args, 2);
+       $columns = array();
+       $values = array();
+       foreach($data as $key => $value) {
+               $columns[] = $key;
+               $values[] = $value;
+       }
+       array_unshift($args, $table, join(',', $columns), $values);
+       call_user_func_array('db_insert', $args);
+}
+
 # same as above, except uses the "replace" command instead of "insert"
 function db_replace($table, $columns, $values) {
        if(!is_array($values)) {
@@ -352,6 +371,23 @@ function db_update($table, $columns, $values) {
        db_send_query($sql);
 }
 
+# like db_update() above, but instead of passing columns and data separately,
+# you can pass one array with the column names as keys and the data as values
+function db_update_assoc($table, $data) {
+       $args = func_get_args();
+       $args = array_slice($args, 2);
+       $columns = array();
+       $values = array();
+       foreach($data as $key => $value) {
+               $columns[] = $key;
+               $values[] = $value;
+       }
+       array_unshift($args, $values);
+       array_unshift($args, join(',', $columns));
+       array_unshift($args, $table);
+       call_user_func_array('db_update', $args);
+}
+
 # pass args for printf-style where clause as usual
 function db_delete($table, $where = '') {
        $sql = "DELETE FROM $table";
@@ -392,9 +428,11 @@ function db_reposition_respace($table, $field) {
 # When editing a particular row, give the user a pulldown, with 0 -> first, 1 -> second, etc, and pass this integer to db_reposition (3rd parameter). The value "ignored" can be passed, and the row will be given a sort value of 0 and ignored for all sorting.
 #
 # $pretty is used in error messages to refer to the row, it defaults to whatever you pass for $table.
+#
+# return value is the "ord" value you should set/insert into your database
 
 function db_reposition($table, $row_id, $new_pos, $field = 'ord', $pretty = 'same as $table', $renumbered_already = false) {
-       if($pretty = 'same as $table') {
+       if($pretty == 'same as $table') {
                $pretty = $table;
        }