17.8.1.11 Traitement des erreurs

Si la requête échoue suite à des erreurs SQL (souvent liées à un filtre mal formé), une exception de type Dcp\Db\Exception ou Dcp\SearchDoc\Exception est retournée. Ces deux types d'erreur hérite de Dcp\Exception.

Les autres erreurs de configuration sont accessibles en utilisant la méthode ::getError().

try {
    $s=new SearchDoc(getDbAccess(), \Dcp\Family\Iuser::familyName);
    $s->addFilter('us_extmail is not null');
    $s->addFilter("pas bon"); // ici une erreur de filtre
    $results=$s->search();
    if ($s->getError()) {
        // autre erreur de configuration
       printf("search error : %s",$s->getError());
    }
} catch (\Dcp\Exception $e) {
    print($e->getMessage());
}

Résultat :

{DB0005} query prepare error : ERROR:  syntax error at or near "bon"
LINE 1: ...cked != -1) and (us_extmail is not null) and (pas bon) ORDER...

La classe SearchDoc permet de récupérer les informations sur la requête afin de débugguer votre recherche. Ces informations sont consultables avec la méthode DocSearch::getSearchInfo() après avoir exécuté la recherche.:

$s=new SearchDoc("","IUSER");
$s->addFilter('us_extmail is not null');
$s->search();
print_r($s->getSearchInfo())

Résultat :

Array
(
    [count] => 4
    [query] => select doc128.id, owner, title, ... us_accexpiredate, values, attrids  from  doc128  
        where (doc128.archiveid is null) and (doc128.doctype != 'T') and (doc128.locked != -1) 
            and (us_extmail is not null) 
            ORDER BY title LIMIT ALL OFFSET 0;
    [error] => 
    [delay] => 0.008s
)
×