Gå til innhold

Try catch, databasehåndtering og prepared statements


Anbefalte innlegg

Jeg har lagt om alle sql-statements til prepared statements og neste skritt er errorhandling. Fra Java i gamledager hadde vi try catch, og det finnes visstnok i php også, og jeg ser at i samhandling med databasen er det massevis av steder ting kan gå galt.

 

Men - jeg finner ingen gode og forståelige eksempler på hvordan try catch kan brukes i php, så derfor spør jeg om hjelp.

 

Her er en konkret metode fra min query_class: Kan noen bidra med en try/catch og en forklaring?

public function getExamById($id){
    $table = $this->config['debug']['mode'] ==1 ? 'eks2_exam': 'tmp_exam';
    $table="tmp_exam";
    $query = "select coursecode, title, filename, filetype, filesize, year, semester, departmentcode from {$table} 
                where eid=?";
            
    $this->stm = $this->database->connection->prepare($query);
    $this->stm->bind_param("i", $id);
    $this->stm->execute();
    $this->stm->bind_result($coursecode, $title, $filename, $filetype, $filesize, $year, $semester, $department);
    
    $res = array();
    
    while ($row = $this->stm->fetch()){
        #public function __construct($c, $f, $ft, $year){
        $e = new Exam($coursecode, $title, $filename, $filetype);
        $e->set('filesize', $filesize);
        $e->setFilesize();
        $e->set('year', $year);
        $e->set('semester', $semester);
        $e->set('department', $department);
        $e->set('id', $id);
        }
    return $e;			
}	
Lenke til kommentar
Videoannonse
Annonse

Det kommer litt an på hvor du legger try/catch'en, når ett exception kastes(?) så er det den første catchen med rett exception type som vil fange den opp, den forplanter/propergates

hele veien opp til det finnes ett catch statement. Du trenger ikke å definere noe i metodene som i java, f.eks

public object getExamById() throws PDOExceptions {}
Denne vil "fange" både PDOExceptions og Exceptions

try
{
    // annen kode

    $result = $query->getExamById(1);

    // mer kode
}
catch (PDOException $e)
{
    $pdoError = $e->getMessage();
}
catch (Exception $e)
{
    $error = $e->getMessage();
}
// kode

try
{
    // kode

    try
    {
        // kode

        if ($test) { throw new ExampleException1('Hello');  }

        // kode

        if ($test2) { throw new ExampleException2('World'); }

        // kode
    }
    catch(ExampleException1 $e)
    {
        echo $e->getMessage(); // Hello
    }

    // kode

}
catch(ExampleExcpetion2 $e)
{
    echo $e->getMessage(); // World
}
http://php.net/manual/en/language.exceptions.php Endret av Crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...