Drupal 7数据库操作

admin 提交于 星期三, 04/12/2017 - 15:12

1. 通过db_query执行原生SQL语句

$ret = db_query('SELECT * FROM test_table  WHERE tid = :tid', array(':tid' => $tid);

db_query语句返回的是一个对象,但是这个对象可以通过foreach遍历,就好像$ret是一个数组一样遍历。其成员是对象。

 

foreach ($ret as $row) {

  echo $row->tid;

}

要注意的是,db_query语句返回的结果虽然可以项数组一样遍历,但只能遍历一次。其内部的实际逻辑是遍历的时候向数据库获取新一行数据,当数据获取完之后并不会重头再获取。

对于对象是怎样实现foreach操作的,可以参考:http://php.net/manual/en/language.oop5.iterations.php

2. 直接获取第一条查询结果:fetch

有时候,我们的查询结果只有一行,可以直接用fetch来获取第一行数据,不必通过foreach等。如果没有第一行,该方法返回FALSE

 

$obj = $ret->fetch();

if ($obj) {

  echo $obj->tid

}

 3. 一次性获取所有结果:fetchAll

如果我们需要对返回结果进行反复遍历,那么需要先把数据通过fetchAll保存到一个数据再操作。否则,我们没有必要这样做,因为这增加了PHP内存的开销。

$rows = $ret->fetchAll();

4. 如果查询语句只返回一列,可以通过fetchCol把该列以数组返回

 

$ret = db_query('SELECT tid FROM test_table')->fetchCol();

foreach ($ret as $tid) {

  echo $tid;

}

5. 如果返回结果只有两列,并且其中一列是ID,可以通过fetchAllKeyed把结果返回成关联数组

 

$ret = db_query('SELECT tid, name FROM test_table')->fetchAllKeyed();

foreach ($ret as $tid => $name) {

  echo $tid . ':' . $name;

}

6. 获取结果行数:rowCount

echo $ret->rowCount();

7. 把结果以某一列作为key值关联到一数组:fetchAllAssoc

$ret = db_query('SELECT * FROM test_table')->fetchAllAssoc();

foreach ($ret as $tid => $row) {

  echo $row->name;

}

8. 把返回结果行以数组形式返回

 

$ret = db_query('SELECT * FROM test_table', array('fetch' => PDO::FETCH_ASSOC));

foreach ($ret as $row) {

  echo $row['tid'];

}

9. 动态生成SQL语句:db_select 

一般情况下,用db_query写原生的SQL是更得心应手一些的。使用框架提供的语法去些SQL语句相当于要多记一些语法。但有时逻辑分支太多,写原生的SQL就需要做大量的字符串拼接,程序可读性会变得很差,这时就应该使用框架提供的数据库操作方式去实现。

看一下db_select的API文档里面的代码例子一般可以猜出这条函数的用法。db_select本身返回一个对象,对象的大部分方法会返回对象本身。但有少量方法除外,例如:join表格。涉及这些方法的时候要注意不要把语句连着写,否则会报错。例如:

 

$query = db_select('test_table', 't')

  ->join('test_table2', 't2');

$result = $query->condition('tid', 5)

  ->execute();

不要写成,这是很容易烦的错误,也是很难调试出的问题。

 

$result = db_select('test_table', 't')

  ->join('test_table2', 't2');

  ->condition('tid', 5)

  ->execute();

标签

添加新评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • Web page addresses and email addresses turn into links automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
请输入"Drupal8"