应该从数据库插入调用返回什么?

时间:2012-01-24 02:24:41

标签: database model-view-controller

我有一个包含大量插入函数的数据源。每个函数都会获取应插入数据库的项目列表。这些项目中的每一项都可以成功插入或不插入。如果没有成功插入,我想知道原因。

是否有关于应从数据源插入函数返回的内容的最佳实践?

初步想法:

布尔成功:不给我任何失败原因

具有布尔成功和字符串原因的自定义响应对象:无法处理> 1插入响应

自定义响应对象列表:似乎做我想做的事情......

2 个答案:

答案 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)

我会返回类似成功插入的内容,并在一个失败或发出警告时抛出异常,或者至少将其记录到文件中,具体取决于您的需要。