полная обработка ошибок SQL

Если по какой-либо причине произошла ошибка при создании записи с использованием картографа, я получаю сообщение об ошибке.

Я хотел бы сделать пользовательское уведомление и изящно потерпеть неудачу …

try { $request->save(); } catch (Exception $e) { $this->utils->errorNotify($f3,'could not create a request entry',http_build_query($_POST)); return null; } 

возможно ли это с F3?

Solutions Collecting From Web of "полная обработка ошибок SQL"

\ DB \ SQL является подклассом PDO, поэтому он может генерировать захватывающие исключения PDO. Поскольку они по умолчанию отключены, вам необходимо сначала включить их. Это можно сделать двумя разными способами:

  • во время инстанцирования, для всех транзакций:

    $db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));

  • далее в коде, для каждой транзакции:

    $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

Как только исключения PDO включены, просто поймайте их как другие исключения:

 try { $db->exec('INSERT INTO mytable(id) VALUES(?)','duplicate_id'); } catch(\PDOException $e) { $err=$e->errorInfo; //$err[0] contains the error code (23000) //$err[2] contains the driver specific error message (PRIMARY KEY must be unique) } 

Это также работает с DB-mappers, поскольку они полагаются на один и тот же класс DB \ SQL:

 $db=new \DB\SQL($dsn,$user,$pwd,array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION)); $mytable=new \DB\SQL\Mapper($db,'mytable'); try { $mytable->id='duplicate_id'; $mytable->save();//this will throw an exception } catch(\PDOException $e) { $err=$e->errorInfo; echo $err[2];//PRIMARY KEY must be unique }