3.3.1 获取数据的函数
<?php // Once you have a valid DB Result object ... // Get each row of data on each iteration until // there is no more rows while ($row = $result->fetchRow()) { $id = $row[0]; } ?>
|
除了fetchRow()还可以使用fetchInto()直接插入$row的值。
<?php ... while ($result->fetchInto($row)) { $id = $row[0]; } ?>
|
3.3.2 选择获取数据的格式
获取模式有DB_FETCHMODE_ORDERED(默认), DB_FETCHMODE_ASSOC and DB_FETCHMODE_OBJECT.
从获取数据方法返回的结果示例:
<?php $res = $db->query('select id, name, email from users'); $row = $res->fetchRow($mode);
//With $mode = DB_FETCHMODE_ORDERED //The default behavior is to return an ordered array. $row = array ( 0 => <column "id" data>, 1 => <column "name" data>, 2 => <column "email" data> );
$id = $row[0];
//With $mode = DB_FETCHMODE_ASSOC //Returns an associative array with column names as array keys: $row = array ( 'id' => <column "id" data>, 'name' => <column "name" data>, 'email' => <column "email" data> );
$id = $row['id'];
//With $mode = DB_FETCHMODE_OBJECT //Returns a DB_row object with column names as properties: $row = db_row Object ( [id] => <column "id" data>, [name] => <column "name" data>, [email] => <column "email" data> )
$id = $row->id; ?>
|
3.3.3 设置获取数据的格式
可以使用 fetchrow() / fetchInto() 方法或者为你的DB实例设置一个默认的模式。
<?php ... // 1) Set the mode per call: while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { [..] } while ($result->fetchInto($row, DB_FETCHMODE_ASSOC)) { [..] }
// 2) Set the mode for all calls: $db = DB::connect($dsn); // this will set a default fetchmode for this Pear DB instance // (for all queries) $db->setFetchMode(DB_FETCHMODE_ASSOC); $result = $db->query(...); while ($row = $result->fetchRow()) { $id = $row['id']; } ?>
|
3.3.4 控制获取数据数量
同时Pear DB获取数据可以带有额外的参数,可以使用一个数字参数来获取需要的数据数量。在你只需要获得数据中的一部分时这时候特别有用(比如在做分页程序的时候)
<?php ... // the row to start fetching $from = 50; // how many results per page $res_per_page = 10; // the last row to fetch for this page $to = $from + $res_per_page; foreach (range($from, $to) as $rownum) { if (!$row = $res->fetchrow($fetchmode, $rownum)) { break; } $id = $row[0]; .... } ?>
|
3.3.5 清除结果,释放变量
当你完成查询的时候,可以用free()方法来结束:
<?php ... $result = $db->query('SELECT * FROM clients'); while ($row = $result->fetchRow()) { ... } $result->free(); ?>
|
3.4 快速retrieve数据
当你不再想用fetchRow()方法来获取数据的时候,Pear DB通过sql语句提供一些特别的方法来返回想要的数据。这些方法有:getOne, getRow, getCol, getAssoc and getAll. 这有一些使用示例:
<?php require_once 'DB.php'; $db = DB::connect('pgsql://postgres@unix+localhost/clients_db'); // ----------------------------------------------------------- // getOne retrieves the first result of the first column // from a query $numrows = $db->getOne('select count(id) from clients'); // ----------------------------------------------------------- // getRow will fetch the first row and return it as an array $sql = 'select name, address, phone from clients where id=1'; if (is_array($row = $db->getRow($sql))) { list($name, $address, $phone) = $row; } // ----------------------------------------------------------- // getCol will return an array with the data of the // selected column. It accepts the column number to retrieve // as the second param. // The next sentence could return for example: // $all_client_names = array('Stig', 'Jon', 'Colin'); $all_client_names = $db->getCol('select name from clients'); // ----------------------------------------------------------- // Other functions are: getAssoc() and getAll(). // For the moment refer to their in-line documentation // at pear/DB/common.php // ----------------------------------------------------------- ?>
|
"get*() 系列方法" 可以为你做很多事情, 包括: 发起一个查询, 获取数据和清除结果。请注意所有的Pear DB函数将可能返回一个 Pear DB_error 对象。
3.5 从查询结果获得更多信息(numRows, numCols, affectedRows, tableInfo)
通过 Pear DB可以从查询结果获得更多有用的数据信息 。这些方法有:
- numRows(): 通过一个"SELECT" 查询返回所有数据的数量。
- numCols():通过一个"SELECT" 查询返回所有的列。
- affectedRows(): 通过("INSERT", "UPDATE" or "DELETE")操作返回所有受影响的数据行数。
- tableInfo():通过一个"SELECT" 查询返回一个包含数据信息的数组。
示例:
<?php ... $db = DB::connect($dsn); $sql = 'select * from clients'; $res = $db->query($sql); // Don't forget to check if the returned result from your // action is a Pear Error object. If you get a error message // like 'DB_error: database not capable', means that // your database backend doesn't support this action. // // Number of rows echo $res->numRows(); // Number of cols echo $res->numCols(); // Table Info print_r ($res->tableInfo()); // Affected rows $sql = "delete from clients"; // remember that this statement won't return a result object $db->query($sql); echo 'I have deleted ' . $db->affectedRows() . 'clients'; ?>
|
3.6 自动增长(Sequences)
Sequences 为数据行提供独一无二的ID标识。如果熟悉MySQL之类的话,可以把它想象为AUTO_INCREMENT.它非常简单,首先你获取一个ID,然后在这个ID所在的行插入你所需要记录的数据。可以为你的表设置更多的Sequences,只需要保证在任何特殊的表中都使用一样的sequence就行。
<?php ... // Get an ID (if the sequence doesn't exist, it will be created) $id = $db->nextID('mySequence');
// Use the ID in your INSERT query $res = $db->query("INSERT INTO myTable (id,text) VALUES ($id,'foo')"); ... ?>
|
3.7 Prepare & Execute/ExcuteMultiple
最新评论