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



Letzte Kommentare