Impressum Disclaimer AGB
XENEVU
analoguhr
WWW CMS 800 Guide

deinMagazin
HPhilo's UpDate Target WiV TVglotzer Tagebuch Meinung Forensenf WebWatch KnowHow »» Artikel Archiv »» Artikel schreiben »» Artikel Leserbriefe Gästebuch
Westerwelle muß weg
www Links
TV-Programm Litfaßsäule lustige Bilder Wallpaper Webmaster Tutorials Treiber Suchen WieIstMeineIp? Browserspiel spielen
Foxkeh



Google

Wissen ist Macht

nix wissen macht auch nix

SQL-OpenManager + SQL-ERRORlogger

800XE 11.2.2009 21:48

Bei größeren Projecten kommt der Zeitpunkt, das mehrere Datenbanken(nicht Tabellen) verwendet werden. Und dann kommt irgendwann der Fall das eine schon geöffnete Datanbank nicht mehr aktuel(aktiviert) ist, weil zwischendrin eine Routine eine Andere Datenbank geöffnet hat.

Ich hatte diese Situation. Erst umging ich das Problem dadurch, das ich einfach die Datenbanken nochmals öffnete. SQL denkt da mit und gibt einfach die alte "Kennung" zurück; das wuste ich wohl damals noch nicht, als ich mir einen "Mitdenker" programmierte.


Aber auch wenn es nicht nötig ist, so ist es besser, den jetzt habe ich überall nur einen 1Zeiler und keinen 3 bzw 4Zeiler.

Später hat sich dann noch ein Logbuch-Schreiber dazugesellt.


Am Anfang die Datei mit den SQL-Zugangsdaten in z.B. ini.php
<?php
/**********************************************************************
* © Andy Zmuda ··· CMS800 ··· 800XE.NETwork
*
* ini.php
**********************************************************************
* globale Informationen, die von allen Scripten geincludet werden
**********************************************************************/
$_CMS800sql['counter']='3';


$_CMS800sql['line'][1]='0';
$_CMS800sql['host'][1]='localhost';
$_CMS800sql['user'][1]='web123';
$_CMS800sql['pass'][1]='geheim1';
$_CMS800sql['base'][1]='usr_web123_1';
$_CMS800sql['name'][1]='#base1';


$_CMS800sql['line'][2]='0';
$_CMS800sql['host'][2]='localhost';
$_CMS800sql['user'][2]='web123';
$_CMS800sql['pass'][2]='geheim2';
$_CMS800sql['base'][2]='usr_web123_2';
$_CMS800sql['name'][2]='#base2';


$_CMS800sql['line'][3]='0';
$_CMS800sql['host'][3]='localhost';
$_CMS800sql['user'][3]='web123';
$_CMS800sql['pass'][3]='geheim3';
$_CMS800sql['base'][3]='usr_web123_3';
$_CMS800sql['name'][3]='#base3';
?>

[size=large]CMS800sql[][/size]
Die Variablen "Host, User, Pass und Base" sind die die sonst auch verwendung finden.
"Line" ist intern, dort wird die SQL-Kennung abgespeichert wenn die Datenbank geöffnet wurde.
"Counter" ist ein Zähler wieviele Datenbanken vorhanden sind bzw wieviele der Angegebenen genutzt werden sollen bzw dürfen. Wird im Beispiel oben der COunter von 3 auf 2 geändert, dann ist Datenbank 3 nichtmehr nutzbar; Auser sie wird auf dem herkömmlichen Wege geöffnet.
"Name" ist eine Alternative zum 1 2 3.
Also, im Gästebuch.php könnte auch ein CMS800sql( 'open',0,'#gBook' ) stehen.

[size=large]SQL-ERRORlogger[/size]
mysql_query( $query ) or die( $query, mysql_error() );
$query ist wie der Name ja sagt, ich habe mir angewöhnt den Query vorher in eine $Variable "aufzubauen", damit ich es im "or die" wiederverwenden kann.
$error ist die $Variable für die Meldung vom mysql_error() Befehl.
$path ist optional; benötigt, wenn unterschiedliche /ordner/datei.php Requestet werden;
Also, wenn die ausgeführten Scripte in unterschiedlichen /Ordnern/ liegen, dann kann(muß) damit der Pfad zur Logbuchdatei "korrigiert" werden.

Diese 2 Strings und eine Datum+Uhrzeit Info werden dann in die Datei geschrieben. Zwischen die Informationen kommt noch ein "Trennstring" damit es möglich ist mit einem Script das Logbuch auszulesen

Ich überlege noch, ob und inwieweit es möglich ist, zusätzlich noch den genauen Ort des fehlerhaften Querys ins Logbuch zu schreiben.


[size=large]CMS800sql[/size]
$do ist "(re)open", "close(all)" oder "info". Open und close dürfte klar sein; wobei das Script ja mitdenkt und einen "open" nur dann durchführt wenn die Datenbank laut Informationen noch nicht geöffnet ist.
"reopen" öffnet die Datenbank auch wenn sie laut Information schon geöffnet ist. Also wenn im "Line" eine Kennung vorhanden ist; reopen ist dafür da, fals ein frendes Script die Datenbank geschloßen hat.

"Info" liest die Informationen aus und gibt einen Text zurück.

<?php


include('../cms800/cms800ini.php');


/**********************************************************************
* SQL-ERRORlogger © Andy Zmuda ··· CMS800 ··· 800XE.NETwork
*
* cms800Database.php
**********************************************************************
* abfangen von "or die(mysql_error());"
* und in Textdatei protokollieren
*
* $errorloger=0; = kein Protokoll = Debug=off
**********************************************************************/
function CMS800sqlERROR( $query, $error, $path='' )
{
$file='CMS800sqlERROR.txt';
$errorloger=1;

$errorlog ="\n".date( 'd.m.Y·H·i·s·' );
$errorlog.="\n»»»CMS800sqlERROR»»»\n".$query;
$errorlog.="\n»»»CMS800sqlERROR»»»\n".$error;
if ( $errorloger )
{
$handle=fopen($path.$file,'ab');
fwrite($handle,$errorlog."\n\n");
fclose($handle);
} echo('<hr>'.nl2br($errorlog));
}
/**********************************************************************
* SQL-OpenManager © Andy Zmuda ··· CMS800 ··· 800XE.NETwork
*
* cms800Database.php
**********************************************************************
* Management Modul zum kontrolierten öffnen und schließen von SQL-DBs
**********************************************************************
* open | reopen = öffnen
* close | closeall = schließen
*
* $sql = die DBnummer laut ini.php
* $base = alterative zur DBnummer
**********************************************************************/
function CMS800sql( $do, // action = open or close
$sql=1, // DBnummer
$base='' // DBname
)
{ global $_CMS800sql;


if ( $base )
{
$sql=$i=0;
while( !$sql && $i++<$_CMS800sql['counter'] )
{
if ( !strcmp($base,$_CMS800sql['base'][$i]) ) $sql=$i;
}
}
if ( $do=='info' )
{
$i=0;$info=$NL='';
while( $i++<$_CMS800sql['counter'] )
{
$info.=$NL.$i.'·'.$_CMS800sql['line'][$i].'·'.$_CMS800sql['name'][$i];$NL="\n";
} return($info);
}
elseif ( $do=='close' )
{
if ( $_CMS800sql['line'][$sql] )
mysql_close($_CMS800sql['line'][$sql]);
$_CMS800sql['line'][$sql]=0;
}
elseif ( $do=='closeall' )
{
$i=0;
while( $i++<$_CMS800sql['counter'] )
{
if ( $_CMS800sql['line'][$i] )
mysql_close($_CMS800sql['line'][$i]);
$_CMS800sql['line'][$i]=0;
}
}
else
{
if ( $do=='reopen' || !$_CMS800sql['line'][$sql] )
{
$_CMS800sql['line'][$sql]
= mysql_connect($_CMS800sql['host'][$sql],
$_CMS800sql['user'][$sql],
$_CMS800sql['pass'][$sql]) or die(CMS800sqlERROR("Keine Verbindung möglich: ",mysql_error()));
} mysql_select_db($_CMS800sql['base'][$sql]) or die(CMS800sqlERROR("Auswahl der Datenbank fehlgeschlagen",mysql_error()));
return($_CMS800sql['line'][$sql]);
}
}



?>


Kommen wir zur Anwendung:
Den folgenden Code einfach in der cms800Database.php anhängen

Ich habe hier das "or die" ohne den "die". War ein Test, dachte die ganze Zeit der wäre nötig. Doch er ist nicht nötig, er ist ein exit() nach Ausgabe der Fehlermeldung. Ohne "die" läuft das Script weiter, höchstwahrscheinlich fehlerhaft.

$db=CMS800sql('open',$sql=1,$base=''); echo('<hr>'.nl2br(CMS800sql('info')));



$query = " SELECT * FROM $tabele";
$query .= " LIMIT 3";
$result= mysql_query($query) or CMS800sqlERROR($query,mysql_error());
while( $line= mysql_fetch_array($result, MYSQL_ASSOC))
{
echo('<br>'.$line['titel']);
}



$db=CMS800sql('close'); echo('<hr>'.nl2br(CMS800sql('info')));




echo('<hr><hr><hr>'.file_get_contents('CMS800sqlERROR.txt'));






Textversion zum ausdrucken


Punkte für diesen Artikel :::: 0 Bewertungen

Beitrag kommentieren:


dein Name:


Gast ····
···· Bookmark @
15:07 Do 9.2. BrotscheibenHalbierer
14Uhr56 es können wieder Scheiben halbiert werden
15:49 Di 17.1. CSVAndy
Ich bin ein Schwein, und Du bist auch ein Schwein
2:13 Mo 16.1. CSVAndy
und täglisch nervt die Suchfunktion
17:01 Mo 9.1. 800XE
Google im FF wieder Deutsch
19:58 Mo 5.12. CSVAndy
Arbeitsergebniss
7:47 Di 29.11. BrotscheibenHalbierer
Lotto Sechser
0:57 Fr 25.11. AndyZmuda
vonAbisZ WEBSite mit Bindestrich
23:36 Do 20.10. BrotscheibenHalbierer
Ausgebrannt
19:35 Di 18.10. BrotscheibenHalbierer
Die deutsche Durchschnittsfamilie
6:15 Do 6.10. 800XE
Tablet-PC für 45€



little Big World crista Speyer Warum mit oder ohne WWW /Ally/All you need Cronjob.de best viewed with mozilla logo