65 事务
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
Drupal还支持事务,对于那些不支持事务的数据库,Drupal还包含了一个透明的回退。然而,当你在同一时间,尝试并启动两个事务时,事务就会变得复杂起来。数据库不同,此时的行为也不相同。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
Drupal还支持事务,对于那些不支持事务的数据库,Drupal还包含了一个透明的回退。然而,当你在同一时间,尝试并启动两个事务时,事务就会变得复杂起来。数据库不同,此时的行为也不相同。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
数据库API在遇到错误时,就会抛出异常,我们可以把数据库操作放在try {} catch() {}区块中,这样异常就会被我们抓住,相关信息可参看http://api.drupal.org/api/group/database/7中的最后一个例子。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
Drupal7使用PDO(PHP数据对象)来访问数据库。更多信息可参看:http://drupal.org/node/549702。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
这部分内容很快就会加上!webchick坚持让我的文档写了多少,发布多少。到目前为止,有关数据库驱动的还没有写好。我将尽快地把它补上来。在此以前,大家可以参考对应的单元测试(http://cvs.drupal.org/viewvc.py/drupal/drupal/modules/simpletest/tests/database_test.test?&view=markup)。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
下面有几个例子,希望能够更好的帮助理解条件语句。为了清晰起见,我们在注释中给出等价的查询字符串,当然在实际的应用中,将会使用占位符和预备语句(prepared statements)。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
condition()中的$value还可以使用子查询的形式。为了使用子查询,首先需要使用db_select()构建一个SelectQuery对象。接着,我们不执行这个Select查询,而是将其作为condition()的value参数传递给另一个查询。当主查询执行时,它将被自动的集成过来。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在有些情况下,我们可能会根据一个字段的值是不是NULL来进行过滤。当然,此时也可以使用condition(),不过我们更推荐使用下面的实用方法,因为它们更易于理解:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
condition()的第一个参数,也可以是一个条件语句对象。内部的条件语句对象将被纳入到外部的条件语句中去,并放在括号中间。内部对象所使用的连接词,可以与外部不同。这样,就可以通过“自下而上”的方式,来创建条件语句对象,从而就可以构建一个复杂的嵌套的条件语句了。
db_condition()帮助函数将返回一个新的条件语句对象。它只有一个参数,就是对象使用的连接词。一般情况下,帮助方法db_and()、db_or()、和db_xor()就可以涵盖大多数情况了。它允许条件语句以内联的方式插入到查询中,这样代码看起来更加紧凑。