Index: dba.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/dba/dba.module,v retrieving revision 1.54 diff -u -r1.54 dba.module --- dba.module 24 Jun 2007 03:41:12 -0000 1.54 +++ dba.module 29 Jul 2007 11:04:43 -0000 @@ -1413,19 +1416,42 @@ $output = NULL; } - $result = db_query("select * from $table"); - $numrow = db_num_rows($result); - $fields = dba_get_fields($table); + // Get table schema. + $fields = array(); + $result = dba_describe_table($table, FALSE); + while ($row = db_fetch_object($result)) { + $fields[] = $row; + } $num_fields = sizeof($fields); + // Dump table data. + $result = db_query("select * from $table"); 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"; + if (!isset($value) || is_null($value)) { + $line .= 'NULL'; + } else if (!empty($value) && ($fields[$i]->Type == 'longblob' || $fields[$i]->Type == 'blob')) { + $line .= '0x'. bin2hex($value); + } + else if (is_numeric($value)) { + $line .= $value; + } + 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 .= "'". $value ."'"; + } + $line .= (++$i < $num_fields) ? ', ' : ");\n"; } $output .= $line; if ($verbose) {