• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Global MySQLi-Fehler abfangen

flashspys

Mitglied
Wenn ich z.B. eine Tabelle abfrage, die nicht existiert, wird ja kein PHP-Fehler erzeugt. Der Fehler bleibt also "versteckt". Kann ich eine Funktion erstellen die automatisch aufgerufen wird, wenn eine Fehlermeldung auftritt, z.B.:
PHP:
function handle_mysqli_error($errno, $errmsg) {
//Zeugs in Datenbank schreiben usw.
}
 
Ich weiß nicht, ob ich dich ganz richtig verstanden habe. Geht es darum, den mysqli error anzuzeigen oder willst du beim auftreten eines Fehlers eine eigene Funktion aufrufen?

Ich hoffe der folgende Code hilft:
PHP:
$mysqli = new mysqli('host', 'user', 'pw', 'db');


if($mysqli->error) {
//wird ausgeführt, wenn ein mysqli Fehler auftritt
//hier kannst du z.B eine eigene Funktion aufrufen, die auf den Fehler reagiert
}
PHP: mysqli::connect_error - Manual
PHP: mysqli::connect_errno - Manual
 
Gut aber wenn ich folgendes mache, wird meine funktion nicht aufgerufen, oder?
PHP:
$mysqli = new mysqli('host', 'user', 'pw', 'db');
if($mysqli->error) {
//wird ausgeführt, wenn ein mysqli Fehler auftritt
//hier kannst du z.B eine eigene Funktion aufrufen, die auf den Fehler reagiert
}
$mysqli->query("insert into nichtexistentetabelle Values('') ");
$mysqli->query("insert into existenteTabelle Values('') ");
$mysqli->query("insert into nichtexistentetabelle Values('') ");

Ich brauche eine funktion, die bei der ersten und bei der letzten Query "greift", und mir da die $mysqli->error und errno parameter übergibt
 
Du könntest das versuchen:

PHP:
class mysqli_extended extends mysqli {
  private static handleSQLError($errno, $error) {
     // Zeugs in Datenbank schreiben
  }
  public function query($sql) {
    $result = @parent::query($sql);
    if (!$result) {
      self::handleSQLError($this->errno, $this->error);
    }
    return $result;
  }
}

Du musst allerdings alle Methoden der Klasse mysqli, die einen error auslösen, neuschreiben.
 
Vielen Dank. Es lebt :D

PHP:
class mysqli_extended extends mysqli {
    private function handleSQLError($errno, $error) {
        die("MySQLi Fehler<br>Fehlernummer: ".$this->errno."<br>Fehlercode: ".$this->error);
    }
    public function query($sql) {
        $result = @parent::query($sql);
        if (!$result) {
            $this->handleSQLError($this->errno, $this->error);
        }
    return $result;
    }
}

$mysqli = new mysqli_extended("host", "user", "passi", "db");
$mysqli->query("select * from nichtexistentetabelle");

Wirft jetzt einen schönen Fehler aus :)
Du hast mir sehr geholfen!!!
 
Vielen Dank. Es lebt :D

PHP:
class mysqli_extended extends mysqli {
    private function handleSQLError($errno, $error) {
        die("MySQLi Fehler<br>Fehlernummer: ".$this->errno."<br>Fehlercode: ".$this->error);
    }
    public function query($sql) {
        $result = @parent::query($sql);
        if (!$result) {
            $this->handleSQLError($this->errno, $this->error);
        }
    return $result;
    }
}

$mysqli = new mysqli_extended("host", "user", "passi", "db");
$mysqli->query("select * from nichtexistentetabelle");

Wirft jetzt einen schönen Fehler aus :)
Du hast mir sehr geholfen!!!

Ich würde sagen, entweder du machst die Methode statisch oder du übergibst die Parameter nicht...
edit: Ich werde definitiv zu viel von Java beinflusst, ich vergesse das Keyword function ständig :D
 
Zurück
Oben