我有一个包含大量插入函数的数据源。每个函数都会获取应插入数据库的项目列表。这些项目中的每一项都可以成功插入或不插入。如果没有成功插入,我想知道原因。
是否有关于应从数据源插入函数返回的内容的最佳实践?
初步想法:
布尔成功:不给我任何失败原因
具有布尔成功和字符串原因的自定义响应对象:无法处理> 1插入响应
自定义响应对象列表:似乎做我想做的事情......
答案 0 :(得分:2)
如果是我,我会设置我的API,如果未正确插入行,则抛出异常。
看起来像(只是演示):
$dbo = new Database();
foreach ($items as $item) {
try {
$dbo->insert($item);
Log::toLogfile('Row was successfully inserted');
} catch (Exception $e) {
// If an exception failed upon insert, I can log the message and move on
error_log($e->getMessage());
}
}
class Database
{
public function insert(array $item) {
// Here you can add any number of validators
if (empty($item)) {
throw new Exception(sprintf('Invalid $item array (%s)', serialize($item));
}
elseif (!array_key_exists('id', $item)) {
throw new Exception(sprintf('Invalid $item[id] (%s)', serialize(item));
}
// Making a call to php function which returns bool
// No problem, we test for return value and throw exception accordingly
if (!$this->dbo->insert($item)) {
throw new Exception(sprintf('Row was not inserted (%s)', serialize($item));
}
// If we made it this far, we have successfully inserted a row
// And code resumes back up after call to this function was made
}
抛出异常是将消息返回给调用代码的最佳方式,它会强制调用代码来处理异常。通过在try / catch块中包装我们的$dbo->insert($item)
调用,我们可以捕获异常,记录它,然后移动到数组中的下一个项目。
答案 1 :(得分:0)
我会返回类似成功插入的内容,并在一个失败或发出警告时抛出异常,或者至少将其记录到文件中,具体取决于您的需要。