diff options
Diffstat (limited to 'include/dblayer/functions_mysql.inc.php')
-rw-r--r-- | include/dblayer/functions_mysql.inc.php | 103 |
1 files changed, 101 insertions, 2 deletions
diff --git a/include/dblayer/functions_mysql.inc.php b/include/dblayer/functions_mysql.inc.php index 7a163af7c..de63c0cac 100644 --- a/include/dblayer/functions_mysql.inc.php +++ b/include/dblayer/functions_mysql.inc.php @@ -219,6 +219,7 @@ function mass_updates($tablename, $dbfields, $datas, $flags=0) { if (count($datas) == 0) return; + // depending on the MySQL version, we use the multi table update or N update queries if (count($datas) < 10) { @@ -232,13 +233,13 @@ UPDATE '.$tablename.' { $separator = $is_first ? '' : ",\n "; - if (isset($data[$key]) and $data[$key] !== '') + if (isset($data[$key]) and $data[$key] != '') { $query.= $separator.$key.' = \''.$data[$key].'\''; } else { - if ($flags & MASS_UPDATES_SKIP_EMPTY ) + if ( $flags & MASS_UPDATES_SKIP_EMPTY ) continue; // next field $query.= "$separator$key = NULL"; } @@ -345,6 +346,65 @@ DROP TABLE '.$temporary_tablename; } } +/** + * updates one line in a table + * + * @param string table_name + * @param array dbfields + * @param array data + * @param int flags - if MASS_UPDATES_SKIP_EMPTY - empty values do not overwrite existing ones + * @return void + */ +function single_update($tablename, $dbfields, $data, $flags=0) +{ + if (count($data) == 0) + return; + + $query = ' +UPDATE '.$tablename.' + SET '; + $is_first = true; + foreach ($dbfields['update'] as $key) + { + $separator = $is_first ? '' : ",\n "; + + if (isset($data[$key]) and $data[$key] != '') + { + $query.= $separator.$key.' = \''.$data[$key].'\''; + } + else + { + if ( $flags & MASS_UPDATES_SKIP_EMPTY ) + continue; // next field + $query.= "$separator$key = NULL"; + } + $is_first = false; + } + if (!$is_first) + {// only if one field at least updated + $query.= ' + WHERE '; + $is_first = true; + foreach ($dbfields['primary'] as $key) + { + if (!$is_first) + { + $query.= ' AND '; + } + if ( isset($data[$key]) ) + { + $query.= $key.' = \''.$data[$key].'\''; + } + else + { + $query.= $key.' IS NULL'; + } + $is_first = false; + } + pwg_query($query); + } +} + /** * inserts multiple lines in a table @@ -411,6 +471,45 @@ INSERT INTO '.$table_name.' } /** + * inserts on line in a table + * + * @param string table_name + * @param array dbfields + * @param array insert + * @return void + */ +function single_insert($table_name, $dbfields, $insert) +{ + if (count($insert) != 0) + { + $query = ' +INSERT INTO '.$table_name.' + ('.implode(',', $dbfields).') + VALUES'; + + $query .= '('; + foreach ($dbfields as $field_id => $dbfield) + { + if ($field_id > 0) + { + $query .= ','; + } + if (!isset($insert[$dbfield]) or $insert[$dbfield] === '') + { + $query .= 'NULL'; + } + else + { + $query .= "'".$insert[$dbfield]."'"; + } + } + $query .= ')'; + + pwg_query($query); + } +} + +/** * Do maintenance on all PWG tables * * @return none |