- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Drupal专业开发指南(5-7章).doc
第5章 Drupal 数据库层(1)
Drupal 的正常工作依赖于数据库。在 Drupal 内部,在你的代码与数据库之间存在着一个轻量级的数据库抽象层。在本章,你将学习这一数据库抽象层是如何工作的,如何使用它,甚至如何写一个自己的驱动。 你将看到查询语句如何被模块自动的修改以限制这些查询的范围。然后你将看到如何链接额外的数据库(比如一个合法的数据库)。最后,当一个模块独立的安装, 升级,或者禁用时,你将测试如何创建,转移,甚至删除一个表。
定义数据库参数
在建立数据库连接时,通过查看你站点的 settings.php 文件,Drupal 将知道需要连接哪一个数据库和使用相应的用户名和密码。这个文件一般位于 sites//settings.php 或者 sites/default/settings.php。定义数据库连接的代码行如下所示:
$db_url = mysql://username:password@localhost/databasename;
这个例子使用的是 MySQL 数据库。使用 PostgreSQL 的用户需要将前缀“mysql”替换为“pgsql”。显然,这里使用的用户名和密码对于你的数据库来说必须是合法的。他们是数据库的机密,而不是 Drupal 的,当你使用你的数据库工具建立数据库帐号是建立他们(用户名和密码)。
理解数据库抽象层
使用一个数据库抽象层 API,直到有一天你试着不再使用它的时候,你才能发现他的全部优点。你是否曾经遇到过需要改变数据库系统的项目,你花费大量的时间仔细的审查每段代码来 将它改为特定数据库的函数和查询?使用数据库抽象层以后,你将不再考虑各个不同数据库之间函数名称的细微差别,由于你使用的是符合 ANSI SQL 的语句,你不再需要写单独的查询语句了。举例来说,没有使用 mysql_query() 或者 pg_query(),Drupal 使用的是 db_query(),这使得业务层和数据库层相互隔离。
Drupal 的数据库层是轻量级的,它主要用于两个目的。第一个目的是使你的代码不与特定的数据库绑定。第二个目的是清洁用户提交的用于查询语句的数据以阻止 SQL 注入攻击。这一层是建立在使用 Sql 比重新学习一个新的抽象层语言更方便的原理之上的。通过检查你的文件 settings.php 内部的变量 $db_url,Drupal 决定要连接的数据库的类型。例如,如果 $db_url 开始部分为“mysql”,那么 Drupal 将包含进 includes/database.mysql.inc。如果 $db_url 开始部分为“pgsql”,那么 Drupal 将包含进 includes/database.pgsql.inc。图5-1展示这一机制。
图5-1 通过检查变量 $db_url,Drupal 决定需要引入哪一个数据库文件。
作为一个例子,让我们比较一下 db_fetch_object() 在 MySQL 和 PostgreSQL 抽象层的不同之处:
// From database.mysqli.inc.
function db_fetch_object($result) {
if ($result) {
return mysql_fetch_object($result);
}
}
// From database.pgsql.inc.
function db_fetch_object($result) {
if ($result) {
return pg_fetch_object($result);
}
}
如果你使用的数据库还未被支持,你可以通过为你的数据库实现相应的包裹函数来建立你自己的数据库抽象层。更多信息,参看本章最后部分的”建立你自己的数据库抽象层”。
建立数据库连接
作为 Drupal 的通常的引导指令(bootstrap)流程的一部分,它将自动的建立数据库链接,所以你不需要为此担心。
注意:当你遇到需要写一个单独的 PHP 脚本或者有段处于 Drupal 之外的 PHP 代码的情况时,你需要访问 Drupal 的数据库,你可以使用 include_once(includes/bootstrap.inc),然后调用 drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)来建立一个数据库连接。然后你就可以使用 db_query() 了,正如下节所讲。
执行简单的查询
Drupal 的函数 db_query() 用来为已建立的数据库连接执行查询语句。这些查询语句包括 SELECT、INSERT、UPDATE 和 DELETE。让我们看一些例子。
从名为 joke 的表中取出所有字段的所有行,条件为字段 vid 的整数值与
您可能关注的文档
最近下载
- 2024年10月27日云南昭通市事业单位选调笔试真题及答案解析.doc VIP
- 讲义总结岩土工程勘察讲义.ppt VIP
- 非常规油气勘探开发地质风险评估.pdf
- 中职 图形图像处理(Photoshop CS5)PS(第7章)教学课件 高教版.ppt VIP
- 市政道路监理规划-范本.pdf VIP
- 2025海南省通信网络技术保障中心招聘事业编制人员12人(第1号)笔试模拟试题及答案解析.docx VIP
- 《飞机上应急医疗》课件——心肺复苏的流程.pptx VIP
- 中职 图形图像处理(Photoshop CS5)PS(第6章)教学课件 高教版.ppt VIP
- 抖音直播社区公约.pdf VIP
- 地质灾害治理工程施工技术规范 DB50_T 989-2020 重庆.pdf VIP
文档评论(0)