Index: modules/dba/dba.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/dba/dba.module,v retrieving revision 1.44.2.6 diff -u -p -r1.44.2.6 dba.module --- modules/dba/dba.module 23 Jun 2007 18:24:05 -0000 1.44.2.6 +++ modules/dba/dba.module 23 Jun 2007 19:06:36 -0000 @@ -1314,11 +1314,27 @@ function dba_backup_table($table, $add_d while ($row = db_fetch_array($result)) { $line = "INSERT INTO $table VALUES("; $i = 0; - foreach($row as $value) { - $value = db_escape_string($value); - $value = ereg_replace("\n","\\n",$value); - $line .= (isset($value)) ? "\"$value\"" : "\"\""; - $line .= (++$i < $num_fields) ? ',' : ");\n"; + foreach ($row as $value) { + if (!empty($value) && ($fields[$i]->Type == 'longblob' || $fields[$i]->Type == 'blob')) { + $line .= '0x'. bin2hex($value); + } + else if (is_numeric($value)) { + $line .= (!empty($value) ? $value : 0); + } + else { + // Value escaping, based on phpMyAdmin dumps + // Escape backslashes first + $value = str_replace('\\', '\\\\', $value); + // Escape newlines and carriage returns + $value = str_replace("\n", "\\n", $value); + $value = str_replace("\r", "\\r", $value); + // Escape single quotes + // This works in Oracle, PostGreSQL and MySQL for sure. + $value = str_replace("'", "''", $value); + + $line .= (!empty($value)) ? '\''. $value .'\'' : "''"; + } + $line .= (++$i < $num_fields) ? ', ' : ");\n"; } $output .= $line; if ($live) {