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) {
