2008年7月31日星期四

Re: [fw-db] _DB , Transactions usage questions

$res should always exists if there is not a fatal error?

With mysql, you'll either get a result set returned (whether the query did
what you expect or not) or an exception thrown (for any mysql type errors,
missing column, bad syntax, etc), causing an interruption of program flow.

You probably need to validate that the operation succeeded a different way.

Kevin


On 7/31/08 2:44 PM, "maxarbos" <maxarbos@yahoo.com> wrote:

>
> thanks for the quick response.
>
> i thought that all errors were non responss pretty much, and thus if
> anything was returned, it is a success.
> In some of my other code, i check for the existance of an error and then
> return on that check. But that is using pear classes of _Error and _MDB2
>
>
> here's one of the methods:
>
> public function doSomethingOne($operation, $incomingdata, $id=NULL) {
> $data = array(
> 'per_id' => $incomingdata['per_id'],
> 'val_one' => $incomingdata['val_one'],
> 's_id' => $incomingdata['s_id'],
> );
>
> if ($operation == 'insert') {
> $data['uni_id'] = $this->_u;
> $res = $this->_db->insert('block_table', $data);
> } elseif ($operation == 'update') {
> $res = $this->_db->update('block_table', $data,
> 'block_table_id = '.$this->_u.'
> AND id = '.$id);
> }
>
> if ($res)
> { return true; }
> else
> { return false; }
>
> }
>
>
>
> Kevin Hallmark wrote:
>>
>> Are the queries returning SQL errors or just not performing the action
>> properly?
>>
>> That block will only rollback if an actual exception is thrown. If the
>> query
>> just isn't producing the correct result, then you should check that in the
>> try block and throw your own exceptions.
>>
>> Kevin
>>
>>
>> On 7/31/08 2:23 PM, "maxarbos" <maxarbos@yahoo.com> wrote:
>>
>>>
>>> Hello,
>>>
>>> i have a question about Zend_DB
>>>
>>> 1: I am using transactions and it seems that my try block is not working
>>> correctly.
>>>
>>> Here is the code:
>>>
>>> $this->_db->beginTransaction();
>>>
>>> try {
>>> $this->block->doSomethingOne($one_info_action, $vals);
>>> $this->block->doSomethingTwo($two_info_action, $vals);
>>>
>>> $this->_db->commit();
>>>
>>> } catch (Exception $e) {
>>> $this->_db->rollBack();
>>> echo $e->getMessage();
>>> }
>>>
>>>
>>> Is this valid? Will the transaction and try block work correctly (if
>>> doSomethingOne and doSomethingTwo both succeed, then and only then, do
>>> the
>>> results commit)? I have a block just like this, but it seems as though
>>> some
>>> of the methods succeed, while others dont. Can methods be checked within
>>> a
>>> try/transaction block? (i hope this makes sense)
>>>
>>> Thanks.
>>
>>
>>

没有评论: