Welcome Guest, Not a member yet? Register   Sign In
Database Utility - Backups Not Working with MySQLi
#4

[eluser]Unknown[/eluser]
This works for me and it's probable that it would work for other people also. Not sure if it covers all cases (i.e. not so common field types).

Based on what Tim Post said, I decided to rewrite _backup() for mysqli driver, using old _backup() from mysql driver as template.

I know, this is not the desirable way of solving this, but it is the quickest thing I found right now (I am writing this post in the middle of a long night). I will try to overwrite the method in an own library. Let you know if I found a way.

Code:
/**
  * MySQLi Export
  *
  * @access private
  * @param array Preferences
  * @return mixed
  */
function _backup($params = array())
{
/*
  // Currently unsupported
  return $this->db->display_error('db_unsuported_feature');
*/
  if (count($params) == 0)
  {
   return FALSE;
  }

  // Extract the prefs for simplicity
  extract($params);

  // Build the output
  $output = '';
  foreach ((array)$tables as $table)
  {
   // Is the table in the "ignore" list?
   if (in_array($table, (array)$ignore, TRUE))
   {
    continue;
   }

   // Get the table schema
   $query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.`'.$table.'`');

   // No result means the table name was invalid
   if ($query === FALSE)
   {
    continue;
   }

   // Write out the table schema
   $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;

   if ($add_drop == TRUE)
   {
    $output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
   }

   $i = 0;
   $result = $query->result_array();
   foreach ($result[0] as $val)
   {
    if ($i++ % 2)
    {
     $output .= $val.';'.$newline.$newline;
    }
   }

   // If inserts are not needed we're done...
   if ($add_insert == FALSE)
   {
    continue;
   }

   // Grab all the data from the current table
   $query = $this->db->query("SELECT * FROM $table");

   if ($query->num_rows() == 0)
   {
    continue;
   }

   // Fetch the field names.
   // We are going to surround all values with single quotes
   // and hope that mysql would be able to make type conversion...
   $field_str = '';
   foreach ($query->row() as $field_name => $field_value) $field_str .= '`'.$field_name.'`, ';

   // Trim off the end comma
   $field_str = preg_replace( "/, $/" , "" , $field_str);

   // Build the insert string
   foreach ($query->result_array() as $row)  
   {
    $val_str = '';

    $i = 0;
    foreach ($row as $v)
    {
     // Is the value NULL?
     if ($v === NULL)
     {
      $val_str .= 'NULL';
     }
     else
     {
      $val_str .= $this->db->escape($v);
     }

     // Append a comma
     $val_str .= ', ';
     $i++;
    }

    // Remove the comma at the end of the string
    $val_str = preg_replace( "/, $/" , "" , $val_str);

    // Build the INSERT string
    $output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
   }

   $output .= $newline.$newline;
  }

  return $output;
}


Messages In This Thread
Database Utility - Backups Not Working with MySQLi - by El Forum - 07-20-2011, 05:07 PM
Database Utility - Backups Not Working with MySQLi - by El Forum - 02-14-2012, 01:08 AM
Database Utility - Backups Not Working with MySQLi - by El Forum - 01-11-2013, 09:26 PM
Database Utility - Backups Not Working with MySQLi - by El Forum - 10-25-2014, 12:25 AM
Database Utility - Backups Not Working with MySQLi - by El Forum - 10-25-2014, 01:36 AM
Database Utility - Backups Not Working with MySQLi - by El Forum - 10-27-2014, 04:35 AM



Theme © iAndrew 2016 - Forum software by © MyBB