[php] Onderschepping fouten MySQL in PHP

Pagina: 1
Acties:

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Hoi mensen,

Ik ben mijn php database frontend aan het voorzien van betere foutafhandeling. Klassiek is een MySQL database connectie bijvoorbeeld als volgt:
PHP:
1
$db=mysql_connect($host,$user_name,$password);
Wat natuurlijk totaal niets terug geeft als het fout gaat. Daarom gebruikt men de 'or die' functie:
PHP:
1
2
$db=mysql_connect($host,$user_name,$password)
or die ("MySQL: Could not connect to database");
Wat al aardig goed is. Door nu nog een '@' symbooltje voor de MySQL opdracht te zetten kun je bepaalde hinderlijke foutboodschappen onderdrukken:
PHP:
1
2
$db=@mysql_connect($host,$user_name,$password)
or die ("MySQL: Could not connect to database");
Maar wanneer nu de fout optreedt stopt het zootje geheel en drukt enkel de foutmelding af. Wat ik zou willen is dat de foutmelding gewoon op de site verschijnt. Nu de HTML pagina wordt pas een heel eind verder in de code opgebouwd. Hoe kan ik die foutmelding onderscheppen zodat ik toch weet dat het misgelopen is, maar zonder meteen te stoppen met de rest van het script?

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


Verwijderd

Hmm, ik vind die fouten zelf meestal juist handig tijdens het scripten, weet je meteen wat de fout is. En als je het goed bouwd krijgen je bezoekers de fout niet meer.

Om op jou vraag terug te komen: volgens mij kan dat niet. (Als dat kan zou ik het ook wel willen weten)

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Ja, ik begrijp ook wel dat de foutmeldingen erg handig zijn en ik wil ze dan ook niet weg doen. Zeker nu niet tijdens de ontwikkelingsfase. Maar als het boeltje af is vind ik het naar de gebruikers toe heel wat professioneler staan wanneer een foutmelding gewoon op een mooi geformateerde pagina verschijnt dan gewoon een wit scherm met de fout. De foutmeldingen hoeven niet te wijzen op slechte programmeerskills. De database server (die niet in mijn handen is) kan altijd wel eens down gaan...

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


Verwijderd

dan maak je toch je eigen functie? die_message($text) die een mooie pagina maakt?

p.s.

Als error tracking aanstaat heb je de beschikking over: $php_errormsg
En tevens is de functie mysql_error() handig.

p.s. (2)

Lees ook eens:
http://www.php.net/manual/sk/features.error-handling.php

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 17:07
Of je zet de gegenereerde errors in een array die je later in je script eventueel, als er 1 of meerdere errors hebben voorgedaan, laat printen.

Verwijderd

@ = vies
or die = vies

Gebruik een class icm templates en je kan zo een hele mooie error-handler maken...

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 11-08 13:24
ff [neptweaker mode]

tis wel vies, maar het werkt wel...
Vooral als je script slecht in elkaar zit en je script op niet bestaande uitvoer zit te wachten |:( (had ik een paar uur geleden nog)

[/neptweaker mode]

[ Voor 0% gewijzigd door Icheb op 27-10-2002 20:53 . Reden: typo ]

sebsoft.nl


Verwijderd

als je caching van je pagina wilt als er bijv geen database-verbinding is moet je toch naar andere dingen kijken dan je pagina gewoon tonen... als je hiet @ GoT zoekt vind je genoeg over php en caching dynamic pages...

wil je een mooie foutmelding gebeuren dan dj_delta's advies opvolgen dus met templates werken en dan een error melding weergeven in een templateje...

een class om een template heen vind ik zelf VIES :) templates kan je mooier maken vind ik persoonlijk zelf mbv kernwoorden <?=$sb_TabelKop?> enzo....

maar dan zou je iig met queries met buffers moeten werken...

het is maar wat je wil :?

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Wat dj_delta even heel kort aanstipt is het volgende:

Voor bijv foutgevoelige taken als queries uitvoeren kun je beter een abstractie-laag maken. Hierbij moet je denken aan een class die je database bedient. Door zelf een functie (method) query te schrijven kun je in die functie alle foutafhandeling bundelen. Je kunt die functie dan ook meteen een mooie uitvoer van de foutmelding laten produceren.

|_____vakje______|


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 17-08 15:34
Zorg er iig voor dat je alle php/html code scheidt, zodat je bijvoorbeeld met een header() kan redirecten naar een standaard error.php. Dan staat er ook nooit meer een mysql/zelfgegenereerde foutmelding in je layout.

Ik blijf er iig vrij nuchter onder....


  • sjokki
  • Registratie: Juli 2002
  • Niet online
Wat ik nog mis is de if/else-constructie.

PHP:
1
2
3
4
5
6
7
8
9
10
$db = mysql_connect($host, $user_name, $password);
if (!$db)
{
  trigger_error(mysql_error(), E_USER_WARNING);
  // hier datgene wat je graag wil laten zien als de verbinding mislukt is
}
else
{
  // hier datgene wat je graag wil laten zien als de verbinding gelukt is
}

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Bedankt jongens! De foutopvang is gelukt. Een class schrijven voor de database interacties moet ik nog eens goed uitpluizen. Die classes heb ik nog niet helemaal onder de knie. Ik gebruik voorlopig een soortgelijke if/else constructie als van sjokkie in combinatie met templates.

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.

Pagina: 1