PHP PEAR中Database(DB)使用介绍
DSN连接方式
DB目前支持的连接方式如下 最完整的格式: phptype(dbsyntax)://username:password@protocol+hostspec/database?option=value 别外还有一些缩写的格式: phptype://username:password@protocol+hostspec:110//usr/db_file.db phptype://username:password@hostspec/database phptype://username:password@hostspec phptype://username@hostspec phptype://hostspec/database phptype://hostspec phptype:///database phptype:///database?option=value&anotheroption=anothervalue phptype(dbsyntax) phptype
其中phptype表示数据库类型,可用的选项有: dbase -> dBase fbsql -> FrontBase ibase -> InterBase ifx -> Informix msql -> Mini SQL mssql -> Microsoft SQL Server mysql -> MySQL (for MySQL <= 4.0) mysqli -> MySQL (for MySQL >= 4.1) (since DB 1.6.3) oci8 -> Oracle 7/8/9 odbc -> ODBC (Open Database Connectivity) pgsql -> PostgreSQL sqlite -> SQLite sybase -> Sybase
以下是一些常用的连接例子:
l 连到一非标准端口的数据库
pgsql://user:pass@tcp(localhost:5555)/pear
l 通过SOCKET方式连到数据库
mysql://user@unix(/path/to/socket)/pear
l 在UNIX机上,连接SQLite数据库
sqlite:////full/unix/path/to/file.db?mode=0666
l 在Windows机上,连接SQLite数据库
sqlite:///c:/full/windows/path/to/file.db?mode=0666
l 使用SSL,连接到MySQLi
mysqli://user:pass@localhost/pear?key=client-key.pem&cert=client-cert.pem
l 通过ODBC连接到一个ACCESS数据库
odbc(access)://username:password@/datasourcename
DB连接实例
CODE:[Copy to clipboard]<?php require_once 'DB.php';
$dsn = 'mysql://username:password@localhost/dbname'; /** 也可以用以下的方式 $dsn = array( 'phptype' => 'pgsql', 'username' => 'someuser', 'password' => 'apasswd', 'hostspec' => 'localhost', 'database' => 'thedb', ); */ //$options是可选的 $options = array( 'debug' => 2, 'portability' => DB_PORTABILITY_ALL, ); $db =& DB::connect($dsn, $options); if (DB::isError($db)) { die($db->getMessage()); }
//设置数据库的默认查询方式 $db->setFetchMode(DB_FETCHMODE_ASSOC);
//执行一个普通的查询语句 $res =& $db->query('SELECT * FROM products'); //取得一个SQL查询的结果集行,列数 printf("共有%d行,%d列数据", $res->numRows(), $res->numCols()); //当前表的结构信息 echo ("<pre>"); print_r($db->tableInfo($res)); echo ("</pre>");
//执行一个带参数的查询 $sql = 'select * from products where products_id < ?'; $data = 50;
$res =& $db->query($sql, $data); //执行含有多个参数的查询 $sql = 'select * from products where products_volt < ? and products_capacity > ?'; $data = array(10, 4000);
$res =& $db->query($sql, $data);
// 记得永远要检查执行的动作是否有错误 if (DB::isError($res)) { die($res->getMessage()); } //按默认方式DB_FETCHMODE_ORDERED,循环显示,输出结果,这种方式下,只能以序号的方式来访问数据字段 while ($row =& $res->fetchRow()) { echo $row[0] . "<br /> "; }
//按DB_FETCHMODE_ASSOC方式,循环显示,输出结果,这种方式下,以字段名称的方式来访问数据字段 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { echo $row['id'] . " "; }
//获取指定范围的行数据 $from = 50;
$resPage = 10;
$to = $from + $resPage;
foreach (range($from, $to) as $rowNum) { if (!$row =& $res->fetchRow($fetchmode, $rowNum)) { break; } echo $row[0] . " "; } //释放资源 $res->free();
//通过getAll(),可以获取整个查询的结果集 $result = $db->getAll("select * from tablename"); //得到UPDATE/INSERT/DELETE等语句,所影响的行数 $db->query('DELETE * FROM clients'); echo 'I have deleted ' . $db->affectedRows() . ' clients'; //close database connection $db->disconnect(); ?> Prepare/Execute使用详解 当要多次执行一组查询,只是有些参数不同时 INSERT INTO tle_name(col1, col2) VALUES(‘val1’, val2); INSERT INTO tle_name(col1, col2) VALUES(‘val3’, val4); …… 或者你的语句要符合多个不同语法的数据库时db1: INSERT INTO tbl_name (col1, col2) VALUES (expr1, expr2) db2: INSERT INTO tbl_name SET col1=expr1, col2=expr2 可以使用prepare/execute语句
|