Was genau ist denn der Inhalt von $fehler ? Sprich wo und wie deklariere ich die Variable?
Ich bin mal von meiner Klasse ausgegangen in meinen fall gibt die Variable nur die fehlerhaften sql befehle wieder zurück die von der Klasse kommen.
Ist in der Entwiklungzeit hilfreich bei der Fehler Analyse. In der Laufzeit(Betriebszeit) würd ich allerding die Routnie wieder rausnehmen. Da es möglicherweiße einen Angriffpunkt liefert (Sql injection).
In deiner obenen geposten klasse würd das dann so ausschauen:
PHP:
$host="127.0.0.1";
$user="name";
$passwd="password";
$db="datenbankname";
$db=new sql($host, $user, $passwd, $db); // Objekt wird erzeugt
// Alternative könntes auch so schreiben
$db=new sql('localhost','name','password','datenbankname'); // Objekt wird erzeugt
Besser ist es nur einmal entweder fix die Zugangs daten bei der Klasse einzutragen oder sie includieren.
Damit wenn sich mal deine Daten änderen nicht alles umschreiben mußt.
Ich will mal nicht so sein und stell dir mal meine Db klasse zu verfügung
Dort ist allerdings auch ein automatisch sql Backup funktion integriert.
Daher auf das Verzeichniss und die datei rechte achten
PHP:
define ('CRLF', chr(13).chr(10)); # Zeilenumbruch
define ('PATH', $_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control/'); # Pfad zur Logdatei
class db {
var $db_name = 'dbname'; // Datenbankname
var $serv = 'localhost' ; // Server
var $uid = 'user' ; // Benutzer
var $pw = 'password' ; // Password
var $conn; // Resultat von mysql_connect().
var $query_id; // Resultat von mysql_query().
var $record = array(); // Letzter Record.
var $row = 0; // Aktuelle Ergebniszeile.
var $num_rows = ""; // Anzahl Zeilen der letzten Anfrage.
var $num_fields = ""; // Anzahl Felder der letzten Anfrage.
var $locked = false; // True, wenn Tabellen gelockt sind.
var $fehler; // Fehler abfangen Objekt klasse.
// Konstruktor der Db Klasse.
function db ($fehler) {
$this->fehler = $fehler;
}
// Verbindung zur Datenbank herstellen.
function connect () {
// Wenn Fehler in Verbindung wird versucht eine neue verbinden aufzubauen.
if (! is_resource($this->conn)) {
$this->conn = @mysql_connect($this->serv, $this->uid, $this->pw);
// Schlug der Verbindungsaufbau fehl, geben wir einen Fehler aus.
if (! is_resource($this->conn)) {
$this->fehler->db_error(
"Konnte keine Verbindung zur Datenbank herstellen.<br>
Versuchen Sie es bitte zu einem Spätern Zeitpunk nochmals"
);
}
// Jetzt versuchen wir die richtige Datenbank auszuwaehlen.
// Schlaegt das fehl, geben wir einen Fehler aus.
if (! mysql_select_db($this->db_name)) {
$this->fehler->db_error(
sprintf("Die Datenbank [%s] konnte nicht ausgewählt werden.",
$this->db_name),
mysql_error(),
mysql_errno()
);
}
}
}
// Versucht die offene Verbindung zur Datenbank zu beenden.
function close () {
@mysql_close();
}
// Fuehrt einen uebergebenen Querystring aus.
function query ($query_string) {
// Automatisch einen Verbindungsaufbau durchfuehren, wenn noch keine
// Verbindung offen ist.
$this->connect();
// Den SQL Befehl ausfuehren.
$this->query_id = @mysql_query($query_string);
$this->row = 0;
// Anzahl Reihen und Spalten speichern.
$this->num_rows = @mysql_num_rows($this->query_id);
$this->num_fields = @mysql_num_fields($this->query_id);
// Wenn wir keine gueltige Anfrageid erhalten haben, geben wir einen Fehler aus.
if (! $this->query_id) {
// Bevor den Fehler ausgeben, versuchen wir noch die Tabellen zu entsperren.
if ($this->locked) {
$this->unlock();
}
$this->fehler->db_error(
sprintf("Falscher SQL Befehl: [%s].", $query_string),
mysql_error(),
mysql_errno()
);
} //einfüg Backup funktion
$sql_date = date("d.m.y, H:i:s"); # Aktuelles Datum und aktuelle Zeit setzen
# Überprüfen ob das Verzeichnis existiert in dem die Logdatei abgelegt werden soll.. Ansonsten Wird das Verzeichnis erstellt..
if(!is_dir($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control')){
echo $_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control';
mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup', 0664);
mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control', 0644);
}
# Nur SQL Befehle loggen, die einen Datensatz verändern.. Also keine SELECT Befehle mitloggen
if(preg_match('/(^insert)|(^update)|(^alter)|(^create)|(^delete)/i', $query_string, $type)){
# SQL Befehl in die Logdatei schreiben.. Datum, Zeit und Zeilenumbruch werden angehängt..
$this->sl_writeFile(PATH.'sql_report.sql', $query_string.';'."\t\t\t# ".$sql_date.CRLF);
}
//return mysql_query($sql); # "mysql_query()" wird ausgeführt
//einfüg ende
}
# Funktion zum Schreiben in eine Datei
function sl_writeFile($file, $data, $mode = 'a'){
$fp = fopen($file, $mode);
fwrite($fp, $data);
fclose($fp);
}
// Liefert in einem Array die letzten Anfragergebnisse.
function next_record () {
// Die naechste Zeile der Anfrage speichern und die Anzahl
// der abgefragten Zeilen um eins erhoehen.
$this->record = mysql_fetch_array($this->query_id);
$this->row += 1;
// Pruefen ob wir ein Array zurueck bekommen haben.
if (! is_array($this->record)) {
mysql_free_result($this->query_id);
$this->query_id = "";
}
return $this->record;
}
// Springen in einer Ergebnistabelle.
function seek ($pos) {
if (mysql_data_seek($this->query_id, $pos)) {
$this->row = $pos;
}
}
// Ergebnis als assoziatives Array zurueck geben.
function fetch_array () {
return mysql_fetch_array($this->query_id);
}
// Gibt einen bestimmten Wert zurueck.
function r ($data) {
return $this->record[$data];
}
// Gibt den wert auf Bildschirm aus.
function e ($data) {
echo $this->record[$data];
}
// Gibt den wert auf Bildschirm aus.
function p ($data) {
print $this->record[$data];
}
// Einen Ausdruck quoten, damit er sicher in einem
// SQL-Statement verwendet werden kann.
function quote ($value = "") {
return addslashes($value);
}
// Versucht den Speicher von der letzten gemachten Anfrage
// wieder freizueben.
function free () {
mysql_free_result($this->query_id);
$this->query_id = "";
}
// Diese Funktion gibt die Id des letzten Inserts zurueck,
// wo der Primary Key vom Typ AUTO_INCREMENT ist.
function insert_id () {
return mysql_insert_id();
}
// Diese Funktion setzt einen SQL String aus den uebergebenen
// Tabellen zusammen mit dem entsprechenden Modus und sperrt
// diese Tabellen.
function lock ($tables) {
$count = count($tables);
$sql = "LOCK TABLES ";
// Alle Tabellen in dem Array durchgehen.
for ($i = 0; $i < $count; $i++) {
$sql .= sprintf("%s %s", key($tables), current($tables));
// Nur bei der letzten Tabelle fuegen wir ein Semikoleon an,
// sonst ein Komma.
if ($i < ($count - 1)) {
$sql .= ",";
} else {
$sql .= ";";
}
next($tables);
}
// Das Sperren der Tabellen ausführen.
$this->query($sql);
// Markieren, dass wir Tabellen gesperrt haben.
$this->locked = true;
}
// Hiermit werden die gesperrten Tabellen entsperrt.
function unlock () {
if ($this->locked) {
$this->locked = false;
// Tabellen entsperren.
$this->query("UNLOCK TABLES");
}
}
}
Parr funktionen darin sind überflüssig kanste ja dann rauslöschen was du davon nicht brauchst.
Mfg Splasch
Zuletzt bearbeitet: