老葛的Drupal培训班 http://zhupou.cn
在建立数据库连接时,通过查看你站点的settings.php文件,Drupal就会知道需要连接哪个数据库以及所用的用户名和密码。这个文件一般位于sites/example.com/settings.php 或者sites/default/settings.php。定义数据库连接的代码,如下所示:
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
有多种方式用于取回查询结果,这依赖于你的需求,你是需要单独的一行还是需要整个结果集,或者你打算获得一定范围内的结果集,是为了内部使用还是想将其分页显示。
前面的代码片段将输出类型为blog的所有已发布节点(表node中的字段status的值,为0时意味着未发布,为1时意味着已发布)。我们接下来就会讲解db_rewrite_sql()。函数db_fetch_object()从结果集中取出一行作为一个对象。如果想将取出的结果作为一个数组的话,那么可以使用db_fetch_array()。前者更为常用,因为与数组相比,大多数开发者都绝前者的语法更简明一些。
老葛的Drupal培训班 Think in Drupal
你可能会想,对于一个有很多日志条目的站点,比如说有10,000个,那么运行前面的代码将会非常危险。我们将对这个语句的结果进行限制,仅仅取回10个最新发布的日志:
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
(译者注:Schema被翻译成了模式, Schema module 翻译成了模式模块, schema definition翻译成了模式定义,这里面的句子有点绕口^_^)
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
在模式定义中声明的字段类型,将会映射成数据库中的本地字段类型。例如,一个size为tiny的整数字段将映射为MySQL中的TINYINT字段,或者PostgreSQL中的smallint字段。实际的映射可查看数据库驱动文件中的db_type_map()函数,比如includes/database.pgsql.php(参看表5-2, 本章后面讲到)。
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
让我们看一个hook_db_rewrite_sql()的具体实现。下面的例子利用了node表中moderate列来覆写节点查询。在我们修改了查询以后,那些不具有“管理内容”权限的用户,就会看不到处于待审核状态的节点(也就是,moderate列为1)。
老葛的Drupal培训班 Think in Drupal
老葛的Drupal培训班 Think in Drupal
假定你想为一个新生的未来的名为DNAbase的数据库编写一个数据库抽象层,该数据库使用分子计算来提升性能。我们不需要从头开始,而是复制一份已有的抽象层,接着修改它。我们将使用PostgreSQL的实现,这是因为MySQL的驱动器被拆分成了,一个includes/database.mysql-common.inc文件,和两个单独的mysql、mysqli驱动器文件。
老葛的Drupal培训班 Think in Drupal