cum pot scrie o eroare fatala intr-o baza de date?

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

pjanooo
PHPRomania Supporter
Mesaje: 5
Membru din: Lun Aug 19, 2013 8:23 pm

cum pot scrie o eroare fatala intr-o baza de date?

Mesajde pjanooo » Joi Iun 12, 2014 4:52 pm

Lucrez la un site, si asa cum e bine si se recomanda, folosesc error_reporting(0). Toate bune, dar m-ar interesa ca, daca apare vreo eroare fatala, sa o pot scrie intr-un tabel al unei alte bd(sau aceeasi).

De exemplu, am o functie care insereaza fisiere uploadate de useri in baza de date. Apoi alta functie cu care obtin recordurile din bd, si afisez rezultatele intr-o alta pagina. Dar daca, sa zicem, tabelul respectiv nu exista in baza de date, atunci voi primi --- Fatal error: Uncaught exception 'Exception' with message 'Database Error [1146] Table 'aaa1.licenta_cti_cse_an4_emsy_curs' doesn't exist' ---

Pe scurt ca sa fie mai clar, creez un site pt o facultate, in care studentii isi pot uploada singuri cursurile, seminariile sau laboratoarele. Am cate o pagina pt fiecare materie, ce contine codul html, + apelul functiei de obtinere a datelor din bd pt acea materie. In bd, am cate un tabel pt fiecare materie. Si dupa cum spuneam, daca exista creata pagina html pt materie, dar nu exista creat tabelul in bd, evident ca voi primi acea eroare fatala, scriptul neavand tabelul din care sa returneze.

Acum vine si intrebarea: bun, folosesc error_reporting(0) (deci nu ii afisez userului final info private), dar in acelasi timp, vreau sa stiu care sunt erorile fatale si nonfatale, citindu-le dintr-un alt tabel.

Am incercat, cred simplist, asa:

$sql = 'SELECT `filename`,`size`,`data`,`download` FROM '.$table;
$result = $db->query($sql);
if (!$result) {
$a = $db->errno;
$b = $db->error;
$c = $a." ".$b;
$db->query("INSERT INTO `errors` SET `id`=null, `error`='$c'");

}
while($row = $result->fetch_assoc()){
?><table>
<tr>
<td id="fila"><?php echo $row['filename'];?></td>
<td id="marime"><?php echo $row['size'];?></td>
<td id="posted"><?php echo $row['data'];?></td>
<td><button><a style="text-decoration: none;" href="<?php echo $row['download'];?>">Download</a></button></td>
</tr>
</table><?php
}

Si supararea e ca in momentul in care apare eroarea fatala, nu se insereaza detaliile erorii in tabelul `errors`. Vreo idee? Merci!



phphp
Average Member
Mesaje: 69
Membru din: Mie Oct 23, 2013 7:28 pm

Re: cum pot scrie o eroare fatala intr-o baza de date?

Mesajde phphp » Joi Iun 12, 2014 5:22 pm

Daca e eroare scrie-ti propria functie de error handling (set_error_handler)
Daca e exceptie pune si tu codul respectiv intr-un
try{
//cod
}catch(Exception $e){
//aici inserezi $e->getMessage()
}
(daca atunci cand apare o exceptie te intereseaza doar sa o logezi, poti sa folosesti si set_exception_handler)


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 11 vizitatori