如何检查 Fat Free Mapper 调用的结果以保存数据库记录?
How do I check the result of a Fat Free Mapper call to save a DB record?
我正在使用 SQL 映射器更新我的 MYSQL 数据库中的记录,它工作正常 - 但我看不到如何检查更新的结果来自调用 save() 或 update()。
更新似乎 return 整个映射器对象,它没有提供明显的方法来检查更新是否失败。我应该检查 return 代码还是捕获异常?
感谢任何帮助!
马特
所有映射器都扩展 Cursor
。问题是游标方法 save() 和 update() return this.
相关:在 Github 上查看此问题:https://github.com/ikkez/f3-cortex/issues/3
出路可能是使用钩子,例如aftersave
或beforesave
:
$mapper->aftersave(function($self,$pkeys){
//do something after inserting or updating
// Maybe validate
});
希望这对您有所帮助。
如果您在初始化 DB 对象时启用它,您可能会得到 PDO 样式的异常。
参考https://fatfreeframework.com/3.6/sql
PDO 异常参考:
http://php.net/manual/en/class.pdoexception.php
P.S: 没试过,不知道有用多少
libregeek 是对的,你应该启用 PDO 异常并捕获它们:
$db=new \DB\SQL($dsn,$user,$pwd,[
\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION]
);
$mytable=new \DB\SQL\Mapper($db,'mytable');
try {
$mytable->copyfrom($input);
$mytable->save();
echo 'Data successfully saved';
} catch(\PDOException $e) {
echo 'Something went wrong';
// let's find what exactly:
$err=$e->errorInfo;
echo $err[0];// PDO error code
echo $err[2];// driver specific error message
}
另见 。
我正在使用 SQL 映射器更新我的 MYSQL 数据库中的记录,它工作正常 - 但我看不到如何检查更新的结果来自调用 save() 或 update()。
更新似乎 return 整个映射器对象,它没有提供明显的方法来检查更新是否失败。我应该检查 return 代码还是捕获异常?
感谢任何帮助!
马特
所有映射器都扩展 Cursor
。问题是游标方法 save() 和 update() return this.
相关:在 Github 上查看此问题:https://github.com/ikkez/f3-cortex/issues/3
出路可能是使用钩子,例如aftersave
或beforesave
:
$mapper->aftersave(function($self,$pkeys){
//do something after inserting or updating
// Maybe validate
});
希望这对您有所帮助。
如果您在初始化 DB 对象时启用它,您可能会得到 PDO 样式的异常。
参考https://fatfreeframework.com/3.6/sql
PDO 异常参考: http://php.net/manual/en/class.pdoexception.php
P.S: 没试过,不知道有用多少
libregeek 是对的,你应该启用 PDO 异常并捕获它们:
$db=new \DB\SQL($dsn,$user,$pwd,[
\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION]
);
$mytable=new \DB\SQL\Mapper($db,'mytable');
try {
$mytable->copyfrom($input);
$mytable->save();
echo 'Data successfully saved';
} catch(\PDOException $e) {
echo 'Something went wrong';
// let's find what exactly:
$err=$e->errorInfo;
echo $err[0];// PDO error code
echo $err[2];// driver specific error message
}
另见