Autor Zpráva
Camo
Profil
Zdravím všetkých!
Mám taký viac teoretický problém. Keďže vývojári PHP sa rozhodli že procedurálne rozhranie pre mysql je zastaralé, rozhodol som sa prepísať svoj CMS do mysqli. Je to dosť rozsiahla záležitosť, preto by som to rád spravil poriadne. Chcem teda spýtať, ako správne ošetrovať vznikajúce chyby.
V podstate len chcem vedieť či je tento prístup, ktorý som zvoli správny.
Riešim to nasledovne:
if(!isset($mysqli)){
     @$mysqli = new mysqli("host", "user", "pass", "dbName");
    if ($mysqli->connect_errno){
        die('<h1>Nepodarilo sa spojit s databazou</h1>');
    }
    $mysqli->set_charset("utf8");
}

$query='select c1,c2 from test';
if($result=$mysqli->query($query)){          // toto chybu nehádže, len priradí false takže volím if
    while($row=$result->fetch_assoc()){
        echo $row['c1'].'*'.$row['c2'].'<br>';
    }
}
Myslíte, že sa bude dať spoľahnúť na to, že $result=$mysqli->query($query) bude vždy pri chybe vracať false?
$mysqli->connect_errno mi príde pre väčšinu prípadov, ako zbytočný riadok navyše.

Ďakujem za pozornosť a odpovede!


Tak ako vidím v manuáli, mal by to byť správny prístup. Takže sa táto téma môže hádam zmazať. Ospravedlňujem sa za zbytočnú otázku, som z toho prechodu trochu nervózny...
Alphard
Profil
Camo:
že procedurálne rozhranie pre mysql je zastaralé
Tam nešlo ani tak o to, že je procedurální.

die('<h1>Nepodarilo sa spojit s databazou</h1>');
Tohle osobně považuji za snad nejhorší způsob ošetření. Uživatel vidí hlášku, které moc nerozumí (navíc zpravidla na bílé stránce, na tu není zvyklý), a vývojář z toho zase nepozná konkrétní příčinu. O logování nemluvě.

Myslíte, že sa bude dať spoľahnúť na to, že $result=$mysqli->query($query) bude vždy pri chybe vracať false?
Ano, jak jste sám zjistil. Returns FALSE on failure. manual
Camo
Profil
Iste, takú hlášku hádže jedine new mysqli. Takže to je dosť ojedinelý prípad. Logujem do db a posielam email o chybe, takže v prípade zlyhania pri spojení nezalogujem aj tak nič a mail adminovi by tiež k ničomu moc neprispel. Prístupnosť servera sledujem cez službu. Stránka aj tak nič moc v takom prípade nezobrazí. Nejaká error.html sa vždy dá dorobiť, ale to tiež neni to čo by užívateľ chcel vidieť.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: