转:http://www.5ga.cn/blog/archives/2008/12/1064
最近对我的PHP后台框架进行些升级维护,决定引入JQuery,和PHP的一个数据库模块PDO,以前用的是自己写的类,作为方便以后使用其他数据库备用,由于现在的PDO中文帮助还是比较少,所以做一个笔记.
各各扩展所对应的数据库是:
Driver name Supported databases
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 and SQLite 2
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER); //设置属性
下面列出多有PDO::setAttribute()的参数:
PDO::ATTR_CASE: 强制列名变成一种格式,详细如下(第二个参数):
* PDO::CASE_LOWER: 强制列名是小写.
* PDO::CASE_NATURAL: 列名按照原始的方式
* PDO::CASE_UPPER: 强制列名为大写.
PDO::ATTR_ERRMODE: 错误提示.
* PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码.
* PDO::ERRMODE_WARNING: 显示警告错误.
* PDO::ERRMODE_EXCEPTION: 抛出异常.
PDO::ATTR_ORACLE_NULLS(不仅仅是ORACLE有效,别的数据库也有效): )指定数据库返回的NULL值在php中对应的数值。
* PDO::NULL_NATURAL: 不变.
* PDO::NULL_EMPTY_STRING: Empty string is converted toNULL.
* PDO::NULL_TO_STRING: NULL is converted to an empty string.
PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requiresbool.
PDO::ATTR_STATEMENT_CLASS: Set user-supplied statement class derived from PDOStatement. Cannot be used with persistent PDO instances. Requiresarray(string classname, array(mixed constructor_args)).
PDO::ATTR_AUTOCOMMIT(available in OCI, Firebird and MySQL): Whether to autocommit every single statement.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY(available in MySQL): Use buffered queries.
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,
PDO::exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。
PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。
获取结果集操作主要是:PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。
PDOStatement::fetchColumn()是获取结果指定第一条记录的某个字段,缺省是第一个字段。
PDOStatement::fetch()是用来获取一条记录,
PDOStatement::fetchAll()是获取所有记录集到一个中,获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。
另外有两个周边的操作,一个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是返回上次插入操作,主键列类型是自增的最后的自增ID。
PDOStatement::rowCount()主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。
事务中,可以使用 PDO::commit() 或 PDO::rollBack() 来结束该事务,这取决于事务中运行的代码是否成功。
PDO->beginTransaction() — 标明回滚起始点
PDO->commit() — 标明回滚结束点,并执行SQL
PDO->__construct() — 建立一个PDO链接数据库的实例
PDO->errorCode() — 获取错误码
PDO->errorInfo() — 获取错误的信息
PDO->exec() — 处理一条SQL语句,并返回所影响的条目数
PDO->getAttribute() — 获取一个“数据库连接对象”的属性
PDO->getAvailableDrivers() — 获取有效的PDO驱动器名称
PDO->lastInsertId() — 获取写入的最后一条数据的主键值
PDO->prepare() — 生成一个“查询对象”
PDO->query() — 处理一条SQL语句,并返回一个“PDOStatement”
PDO->quote() — 为某个SQL中的字符串添加引号
PDO->rollBack() — 执行回滚
PDO->setAttribute() — 为一个“数据库连接对象”设定属性
PDOStatement->bindColumn() — Bind a column to a PHP variable
PDOStatement->bindParam() — Binds a parameter to the specified variable name
PDOStatement->bindValue() — Binds a value to a parameter
PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.
PDOStatement->columnCount() — 返回数据集列的数量对应:num_fields
PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle
PDOStatement->execute() — Executes a prepared statement
PDOStatement->fetch() — 返回结果集的下一条.
PDOStatement->fetchAll() — 返回一个数组包含着全部的值
PDOStatement->fetchColumn() — Returns a single column from the next row of a result set
PDOStatement->fetchObject() — Fetches the next row and returns it as an object.
PDOStatement->getAttribute() — Retrieve a statement attribute
PDOStatement->getColumnMeta() — Returns metadata for a column in a result set
PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle
PDOStatement->rowCount() — 返回一个数字显示在执行SQL操作后受影响的行数
PDOStatement->setAttribute() — Set a statement attribute
PDOStatement->setFetchMode() — 返回数据库表属性Set the default fetch mode for this statement
最近对我的PHP后台框架进行些升级维护,决定引入JQuery,和PHP的一个数据库模块PDO,以前用的是自己写的类,作为方便以后使用其他数据库备用,由于现在的PDO中文帮助还是比较少,所以做一个笔记.
各各扩展所对应的数据库是:
Driver name Supported databases
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 and SQLite 2
1.
$user=’root’;//数据库连接用户名
2.
$pass=”;//对应的密码
3.
try{
4.
$db = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass,array(PDO::ATTR_PERSISTENT => true));//初始化PDO对象
5.
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true)
6.
$db = new PDO(’数据库类型:host=主机地址;dbname=数据库名’,用户名,密码,array(PDO::ATTR_PERSISTENT => true));
7.
$db->query(’SET NAMES \’utf8\”);//设置连接数据库的语言环境
8.
echo "连接成功";
9.
/*你还可以进行一次搜索操作
10.
foreach($dbh->query(’SELECT * from gaga’)as $row){
11.
print_r($row);//你可以用 echo($GLOBAL); 来看到这些值
12.
}
13.
*/
14.
//$db = null;
15.
}catch(PDOException$e){
16.
die(’数据库连接错误: ‘.$e->getMessage().’
17.
‘);
18.
}
$user=’root’;//数据库连接用户名
2.
$pass=”;//对应的密码
3.
try{
4.
$db = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass,array(PDO::ATTR_PERSISTENT => true));//初始化PDO对象
5.
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true)
6.
$db = new PDO(’数据库类型:host=主机地址;dbname=数据库名’,用户名,密码,array(PDO::ATTR_PERSISTENT => true));
7.
$db->query(’SET NAMES \’utf8\”);//设置连接数据库的语言环境
8.
echo "连接成功";
9.
/*你还可以进行一次搜索操作
10.
foreach($dbh->query(’SELECT * from gaga’)as $row){
11.
print_r($row);//你可以用 echo($GLOBAL); 来看到这些值
12.
}
13.
*/
14.
//$db = null;
15.
}catch(PDOException$e){
16.
die(’数据库连接错误: ‘.$e->getMessage().’
17.
‘);
18.
}
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER); //设置属性
下面列出多有PDO::setAttribute()的参数:
PDO::ATTR_CASE: 强制列名变成一种格式,详细如下(第二个参数):
* PDO::CASE_LOWER: 强制列名是小写.
* PDO::CASE_NATURAL: 列名按照原始的方式
* PDO::CASE_UPPER: 强制列名为大写.
PDO::ATTR_ERRMODE: 错误提示.
* PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码.
* PDO::ERRMODE_WARNING: 显示警告错误.
* PDO::ERRMODE_EXCEPTION: 抛出异常.
PDO::ATTR_ORACLE_NULLS(不仅仅是ORACLE有效,别的数据库也有效): )指定数据库返回的NULL值在php中对应的数值。
* PDO::NULL_NATURAL: 不变.
* PDO::NULL_EMPTY_STRING: Empty string is converted toNULL.
* PDO::NULL_TO_STRING: NULL is converted to an empty string.
PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requiresbool.
PDO::ATTR_STATEMENT_CLASS: Set user-supplied statement class derived from PDOStatement. Cannot be used with persistent PDO instances. Requiresarray(string classname, array(mixed constructor_args)).
PDO::ATTR_AUTOCOMMIT(available in OCI, Firebird and MySQL): Whether to autocommit every single statement.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY(available in MySQL): Use buffered queries.
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,
PDO::exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。
PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。
获取结果集操作主要是:PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。
PDOStatement::fetchColumn()是获取结果指定第一条记录的某个字段,缺省是第一个字段。
PDOStatement::fetch()是用来获取一条记录,
PDOStatement::fetchAll()是获取所有记录集到一个中,获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。
另外有两个周边的操作,一个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是返回上次插入操作,主键列类型是自增的最后的自增ID。
PDOStatement::rowCount()主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。
事务中,可以使用 PDO::commit() 或 PDO::rollBack() 来结束该事务,这取决于事务中运行的代码是否成功。
1.
try{
2.
$db = new PDO(’odbc:SAMPLE’,'db2inst1′,’ibmdb2′,
3.
array(PDO_ATTR_PERSISTENT=>true));
4.
echo "Connected\n";
5.
$db->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_EXCEPTION);
6.
$db->beginTransaction();
7.
$db->exec("insert into staff (id, first, last) values (23, ‘Joe’, ‘Bloggs’)");
8.
$db->exec("insert into salarychange (id, amount, changedate)
9.
values (23, 50000, NOW())");
10.
$db->commit();
11.
12.
}catch(Exception $e){
13.
$db->rollBack();
14.
echo"Failed: ".$e->getMessage();
15.
}
try{
2.
$db = new PDO(’odbc:SAMPLE’,'db2inst1′,’ibmdb2′,
3.
array(PDO_ATTR_PERSISTENT=>true));
4.
echo "Connected\n";
5.
$db->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_EXCEPTION);
6.
$db->beginTransaction();
7.
$db->exec("insert into staff (id, first, last) values (23, ‘Joe’, ‘Bloggs’)");
8.
$db->exec("insert into salarychange (id, amount, changedate)
9.
values (23, 50000, NOW())");
10.
$db->commit();
11.
12.
}catch(Exception $e){
13.
$db->rollBack();
14.
echo"Failed: ".$e->getMessage();
15.
}
PDO->beginTransaction() — 标明回滚起始点
PDO->commit() — 标明回滚结束点,并执行SQL
PDO->__construct() — 建立一个PDO链接数据库的实例
PDO->errorCode() — 获取错误码
PDO->errorInfo() — 获取错误的信息
PDO->exec() — 处理一条SQL语句,并返回所影响的条目数
PDO->getAttribute() — 获取一个“数据库连接对象”的属性
PDO->getAvailableDrivers() — 获取有效的PDO驱动器名称
PDO->lastInsertId() — 获取写入的最后一条数据的主键值
PDO->prepare() — 生成一个“查询对象”
PDO->query() — 处理一条SQL语句,并返回一个“PDOStatement”
PDO->quote() — 为某个SQL中的字符串添加引号
PDO->rollBack() — 执行回滚
PDO->setAttribute() — 为一个“数据库连接对象”设定属性
PDOStatement->bindColumn() — Bind a column to a PHP variable
PDOStatement->bindParam() — Binds a parameter to the specified variable name
PDOStatement->bindValue() — Binds a value to a parameter
PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.
PDOStatement->columnCount() — 返回数据集列的数量对应:num_fields
PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle
PDOStatement->execute() — Executes a prepared statement
PDOStatement->fetch() — 返回结果集的下一条.
PDOStatement->fetchAll() — 返回一个数组包含着全部的值
PDOStatement->fetchColumn() — Returns a single column from the next row of a result set
PDOStatement->fetchObject() — Fetches the next row and returns it as an object.
PDOStatement->getAttribute() — Retrieve a statement attribute
PDOStatement->getColumnMeta() — Returns metadata for a column in a result set
PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle
PDOStatement->rowCount() — 返回一个数字显示在执行SQL操作后受影响的行数
PDOStatement->setAttribute() — Set a statement attribute
PDOStatement->setFetchMode() — 返回数据库表属性Set the default fetch mode for this statement
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1555/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2009-1-4 13:28
评论列表