Datenbankbackups mit DBUTIL und MySQLi in CodeIgniter

In einem unserer Firmenprojekte nutze ich die DB Utitlity-Klasse von CodeIgniter um einfach ein Backup von bestimmten Tabellen zu erstellen. Leider gibt es ein kleines Problem mit der backup() Funktion der dbutil-Klasse: sie funktioniert nur mit MySQL und nicht unter MySQLi.

Da ich aber für das Projekt die MySQLi-Variante bevorzuge habe ich mir einmal angeschaut wo das eigentliche Problem liegt. Prinzipiell sollte es ja kein grosses Problem sein die MySQL-Funktionalität zu portieren.

Wenn man sich die Datei mysql_utility.php anschaut wird schnell klar, dass die _backup()-Funktion nur zwei MySQL-spezifische Befehle nutzt: mysql_fetch_field() und mysql_field_type(). Nach ein wenig testen bin ich auf folgende Lösung gekommen um die backup-Funktion sauber mit MySQLi nutzen zu können:

Schritt 1

Man überschreibt die _backup()-Funktion in mysqli_utility.php mit der kompletten Funktion aus mysql_utility.php

Schritt 2

Man ersetzt in der Funktion in mysqli_utility.php den folgenden Code-Block:

$i = 0;
$field_str = '';
$is_int = array();
while ($field = mysql_fetch_field($query->result_id))
{
        // Most versions of MySQL store timestamp as a string
        $is_int[$i] = (in_array(
                                                        strtolower(mysql_field_type($query->result_id, $i)),
                                                        array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
                                                        TRUE)
                                                        ) ? TRUE : FALSE;

        // Create a string of field names
        $field_str .= '`'.$field->name.'`, ';
        $i++;
}

durch

$i = 0;
$field_str = '';
$is_int = array();

while ($field = mysqli_fetch_field($query->result_id)) {

        $is_int[$i]     = in_array((int)$field->type,array(1,2,3,8,9));

        // Create a string of field names
        $field_str .= '`'.$field->name.'`, ';
        $i++;

}

Schritt 3

Man freut sich über die nun (hoffentlich ;) ) funktionierende Backup-Funktion.

Meine bisherigen Tests mit ein paar Datenbanken lefern identische Ergebnisse für Beide Varianten.

(( Da der Artikel wahrscheinlich nur für einen Teil der Blog-Besucher interessant ist habe ich ihn Extra nur gekürzt auf der Startseite veröffentlicht – das nur als Hinweis falls sich jemand gewundert hat ;-) ))

Kurz-URLs:http://tinyurl.com/47fqh6d
http://bit.ly/9AO4Ep

Verwandte Themen:

  1. Zebra_Session – Wrapper für PHP-Session mit MySQL-Unterstützung

Christian

Baujahr 1976, Software-Entwickler und Web-Designer aus Leidenschaft, Erfahrung in gefühlten 9342049 Programmiersprachen (PHP, Perl, C#, VB.Net, VB6, Delphi um nur einige zu nennen), in der Vergangenheit an diversen Open Source Projekten beteiligt (allen voran das gute alte YaBB und YaBB SE)