Tutorials

Errors in mysql registreren

Veel vragen over PHP gaan vaak zonder dat men het weet over Mysql.

Pagina 1

Errors afvangen

Niets is erger als een fout melding waar jij niet mee kan. Het is daarom belangrijk om de fout meldingen
  • [item]Ergens te registeren in het script[/item]
    [item]In een extern bestand op te slaan[/item]


Als er een fout optreed in mysql kan je altijd een error opvragen!
Dit kan als volgt
mysql_query('SELECT * FROM bestaat_niet') or die(mysql_errno().': '.mysql_error());
Hier kan je veel mee alleen waneer je bezoekers deze fouten generen kan je er niets mee loggen is dan verplicht.

Dat kan eenvoudig met een functie die je zelf maakt ;)
<?
//log errors made by mysql. Log IP, error, sql code, requested url and date
function log_error($sql){
global $_SERVER;
$text = 'Date:'.date('Y-m-d H:i:s').' mysql error: '.mysql_errno().':'.mysql_error().' sql:'.$sql.' page:'.$_SERVER['REQUEST_URI'].' IP:'.$_SERVER['REMOTE_ADDR'];
$dir = 'logs/mysql.txt';
$handle = fopen($dir,'a');
fwrite($handle,$text."\r\n");
}
?>
Zorg dat mysql.txt 777 schrijf rechten heeft
Daarna na elke query
mysql_query($sql) or die(log_error($sql);

en voortaan worden alle errors gelogd.
Pagina 2

Voorbeelden van Errors

Even een voorbeeld uit mijn log database van eigen website

Date:2004-12-27 12:29:19
mysql error:1054:Unknown column 'u_id' in 'where clause'
sql:SELECT l_url FROM links WHERE u_id = 1
page:/phpnieuws/links/1/
IP:127.0.0.1

Nu kun je precies zien waar de fout zit. De kolom u_id bestaat niet. En waarschijnlijk heb ik me verward met een ander script.



Date:2004-12-29 23:48:55
mysql error:1054:Unknown column 'categorie.c_image' in 'field list'
sql:SELECT nieuws.n_id,
nieuws.n_titel,
nieuws.n_kort,
nieuws.n_lang,
nieuws.n_datum,
gebruikers.u_username,
categorie.c_categorie,
categorie.c_image
FROM nieuws INNER JOIN gebruikers ON (nieuws.n_u_id = gebruikers.u_id) INNER JOIN
categorie ON (nieuws.n_c_id = categorie.c_id) ORDER BY nieuws.n_id DESC LIMIT 0,10 page:/nieuws/ IP:xx.xx.xx.xx


Hieraan kun jee een voudig zien dat de het kolom c_image in tabel categorie niet betstaat. Dit geeft dan deze error. Nu ontstond deze fout nadat ik een aanpassing had gedaan in de tabel. Ik had een overbodige kolom verwijderd. En de sql query niet aangepast.


Date:2004-12-17 21:58:00
mysql error:1062:Duplicate entry 'Eris' for key 2
sql:INSERT INTO gebruikers SET u_username = "Eris",u_email = "[email protected]",u_ww = "33c4334434f2a7a231e0d7c" page:/phpnieuws/aanmelden/
IP:127.0.0.1


Dit geeft aan dat er 2x maal de zelfde invoer is geweest in de database meld een veld met unique. Deze optie geeft dat een waarde maar 1 keer mag voor komen. Door dit in php netjes af te vangen kan je hier ook simpel een voorkomen dat er 2 keer dezelfde gebruikers naam in een database voorkomt.

Date:2004-12-18 13:54:33
mysql error:1045: Access denied for user: 'root@localhost' (Using password: NO)
sql:none
page:/nieuws/
IP:xx.xxx.xx.xx


Misschien de leukste.
Geen toegang tot de database.

Zoals je ziet kan ik zo dagen door gaan door alleen de mysql errors af te af te vangen en de errors even goed door te lezen. Voordat je vragen stelt op het forum.

Reacties

0
Nog geen reacties.