@@ -311,8 +311,17 @@ function escape($string, $link = 0) {
311311 */
312312 function arrayToUpdate ($ table , $ data , $ where = NULL , $ limit = 0 , $ link = 0 ) {
313313 $ this ->link = $ link ? $ link : $ this ->link ;
314+ if (is_array (reset ($ data ))) {
315+ $ cols = array ();
316+ foreach (array_keys ($ data [0 ]) as $ c ) {
317+ $ cols [] = "` {$ c }` = VALUES(` {$ c }`) " ;
318+ }
319+ return $ this ->arrayToInsert ($ table , $ data , TRUE , implode (', ' , $ cols ));
320+ }
314321 $ fields = array ();
315- foreach ($ data as $ key => $ val ) $ fields [] = (in_array (strtolower ($ val ), $ this ->reserved )) ? "` $ key` = " . strtoupper ($ val ) : "` $ key` = ' " . $ this ->escape ($ val ) . "' " ;
322+ foreach ($ data as $ key => $ val ) {
323+ $ fields [] = (in_array (strtolower ($ val ), $ this ->reserved )) ? "` $ key` = " . strtoupper ($ val ) : "` $ key` = ' " . $ this ->escape ($ val ) . "' " ;
324+ }
316325 return (!empty ($ fields )) ? $ this ->query ("UPDATE ` {$ table }` SET " . implode (', ' , $ fields ) . ($ where ? " WHERE {$ where }" : NULL ) . ($ limit ? " LIMIT {$ limit }" : NULL ) . "; " , $ this ->link ) ? $ this ->affected : FALSE : FALSE ;
317326 }
318327
@@ -326,8 +335,7 @@ function arrayToUpdate($table, $data, $where = NULL, $limit = 0, $link = 0) {
326335 */
327336 function arrayToInsert ($ table , $ data , $ ignore = FALSE , $ duplicateupdate = NULL , $ link = 0 ) {
328337 $ this ->link = $ link ? $ link : $ this ->link ;
329- $ depth = create_function ('$a,$callback ' , '$m = 1; foreach ($a as $v) if (is_array($v)) { $d = $callback($v,$callback) + 1; if ($d > $m) $m = $d; } return $m; ' );
330- $ multirow = ($ depth ($ data , $ depth ) == 2 );
338+ $ multirow = is_array (reset ($ data ));
331339 if ($ multirow ) {
332340 $ c = implode ('`, ` ' , array_keys ($ data [0 ]));
333341 $ dat = array ();
@@ -432,17 +440,16 @@ function exportTable2CSV($table, $file, $columns = '*', $where = NULL, $limit =
432440 foreach ($ columns as $ c )
433441 $ tableColumnsArr [] = "' {$ c }' AS ` {$ c }` " ;
434442 }
435- $ columnsSQL = "SELECT " . implode (', ' , $ tableColumnsArr ) . " UNION ALL " ;
443+ $ columnsSQL = "SELECT " . implode (', ' , $ tableColumnsArr );
436444 }
437-
438- $ sql = (( $ showColumns ) ? $ columnsSQL : NULL ) .
439- "SELECT " . ( is_array ( $ columns ) ? ' ` ' . implode ( ' `, ` ' , $ columns ) . ' ` ' : $ columns ) . " " .
445+
446+ $ sql = " SELECT " . ( is_array ( $ columns ) ? ' ` ' . implode ( ' `, ` ' , $ columns ) . ' ` ' : $ columns ) . " FROM ` { $ table } ` " . ( $ where ? " WHERE { $ where }" : NULL ) . ( $ limit ? " LIMIT { $ limit }" : NULL );
447+ $ sql = (( $ showColumns ) ? "SELECT * FROM ( ( " . $ columnsSQL . " ) UNION ALL ( { $ sql } ) ) `a` " : "{ $ sql } " ) .
440448 "INTO OUTFILE ' {$ this ->escape ($ file )}' " .
441449 "FIELDS TERMINATED BY ' {$ delimiter }' " .
442450 "OPTIONALLY ENCLOSED BY ' {$ enclosure }' " .
443451 "ESCAPED BY ' {$ this ->escape ($ escape )}' " .
444- "LINES TERMINATED BY ' {$ newLine }' " .
445- "FROM ` {$ table }` " . ($ where ? " WHERE {$ where }" : NULL ) . ($ limit ? " LIMIT {$ limit }" : NULL ) . "; " ;
452+ "LINES TERMINATED BY ' {$ newLine }'; " ;
446453 return ($ this ->query ($ sql , $ this ->link )) ? $ file : FALSE ;
447454 }
448455
0 commit comments