<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[转：PHP中的PDO函数库（PDO Functions）]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 30 Dec 2008 09:07:28 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	PDO是一个“数据库访问抽象层”，作用是统一各种数据库的访问接口，与mysql和mysqli的函数库相比，PDO让跨数据库的使用更具有亲和力；与ADODB和MDB2相比，PDO更高效。目前而言，实现“数据库抽象层”任重而道远，使用PDO这样的“数据库访问抽象层”是一个不错的选择。<br/><br/>PDO->beginTransaction() — 标明回滚起始点<br/>PDO->commit() — 标明回滚结束点，并执行SQL<br/>PDO->__construct() — 建立一个PDO链接数据库的实例<br/>PDO->errorCode() — 获取错误码<br/>PDO->errorInfo() — 获取错误的信息<br/>PDO->exec() — 处理一条SQL语句，并返回所影响的条目数<br/>PDO->getAttribute() — 获取一个“数据库连接对象”的属性<br/>PDO->getAvailableDrivers() — 获取有效的PDO驱动器名称<br/>PDO->lastInsertId() — 获取写入的最后一条数据的主键值<br/>PDO->prepare() — 生成一个“查询对象”<br/>PDO->query() — 处理一条SQL语句，并返回一个“PDOStatement”<br/>PDO->quote() — 为某个SQL中的字符串添加引号<br/>PDO->rollBack() — 执行回滚<br/>PDO->setAttribute() — 为一个“数据库连接对象”设定属性<br/>PDOStatement->bindColumn() — Bind a column to a PHP variable<br/>PDOStatement->bindParam() — Binds a parameter to the specified variable name<br/>PDOStatement->bindValue() — Binds a value to a parameter<br/>PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.<br/>PDOStatement->columnCount() — Returns the number of columns in the result set<br/>PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle<br/>PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle<br/>PDOStatement->execute() — Executes a prepared statement<br/>PDOStatement->fetch() — Fetches the next row from a result set<br/>PDOStatement->fetchAll() — Returns an array containing all of the result set rows<br/>PDOStatement->fetchColumn() — Returns a single column from the next row of a result set<br/>PDOStatement->fetchObject() — Fetches the next row and returns it as an object.<br/>PDOStatement->getAttribute() — Retrieve a statement attribute<br/>PDOStatement->getColumnMeta() — Returns metadata for a column in a result set<br/>PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle<br/>PDOStatement->rowCount() — Returns the number of rows affected by the last SQL statement<br/>PDOStatement->setAttribute() — Set a statement attribute<br/>PDOStatement->setFetchMode() — Set the default fetch mode for this statement<br/><br/>从函数列表可以看出，操作基于不同的对象，“PDO”表示的是一个数据库连接对象（new PDO产生），“PDOStatement”表示的是一个查询对象（PDO->query()产生）或者是一个结果集对象（PDO->prepare()产生）。<br/>一个“数据库连接对象”的例子，返回“PDO”：<br/><?php<br/>$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br/>?><br/><br/>一个“查询对象”的例子，返回“PDOStatement”：<br/><?php<br/>$sql = "INSERT INTO `test`.`table` (`name` ,`age`)VALUES (?, ?);";<br/>$stmt = $dbh->prepare($sql);<br/>?><br/><br/>一个“结果集对象”的例子，返回“PDOStatement”：<br/><?php<br/>$sql = "SELECT * FROM `table` WHERE `name` = 'samon'";<br/>$stmt = $dbh->query($sql);<br/>?><br/><br/>在test库里面生成table表，并写入一些数据：<br/><?php<br/>$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br/>$dbh->query('set names utf8;');<br/><br/>$sql = "<br/>DROP TABLE IF EXISTS `table`;<br/>CREATE TABLE `test`.`table` (<br/>`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,<br/>`name` VARCHAR( 255 ) NOT NULL ,<br/>`age` VARCHAR( 255 ) NOT NULL<br/>) ENGINE = InnoDB DEFAULT CHARSET=utf8;<br/>INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('samon', '27');<br/>INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('leo', '26');<br/>INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('ben', '28');<br/>";<br/>$dbh->query($sql);<br/>?><br/><br/>PDO->exec()方法的作用是处理一条SQL语句，并返回所影响的条目数。<br/><br/>PDO->query()方法的作用是处理一条SQL语句，并返回一个“PDOStatement”。<br/><br/>PDO->prepare()方法的作用是生成一个“查询对象”。<br/><br/>PDO->lastInsertId()方法的作用是获取写入的最后一条数据的主键值。<br/><?php<br/>$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br/>$dbh->query('set names utf8;');<br/><br/>$sql = "INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);";<br/>$dbh->query($sql);<br/>$lid = $dbh->lastInsertId($sql);<br/>print_r($lid); // 显示主键的值<br/>?><br/><br/>PDO->quote()方法的作用是为某个SQL中的字符串添加引号。PDO->quote()方法有两个参数，第一个参数是字符串，第二个参数表示参数的类型。<br/><br/>PDO->getAttribute()方法的作用是获取一个“数据库连接对象”的属性。PDO->setAttribute()方法的作用是为一个“数据库连接对象”设定属性。<br/><?php<br/>// 修改默认的错误显示级别<br/>$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);<br/>?><br/><br/>属性列表：<br/>PDO::PARAM_BOOL<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个布尔类型<br/>PDO::PARAM_NULL<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个SQL中的NULL类型<br/>PDO::PARAM_INT<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个SQL中的INTEGER类型<br/>PDO::PARAM_STR<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个SQL中的SQL CHAR，VARCHAR类型<br/>PDO::PARAM_LOB<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个SQL中的large object类型<br/>PDO::PARAM_STMT<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示一个SQL中的recordset类型，还没有被支持<br/>PDO::PARAM_INPUT_OUTPUT<br/>&nbsp;&nbsp;&nbsp;&nbsp;Specifies that the parameter is an INOUT parameter for a stored procedure. You must bitwise-OR this value with an explicit PDO::PARAM_* data type.<br/>PDO::FETCH_LAZY<br/>&nbsp;&nbsp;&nbsp;&nbsp;将每一行结果作为一个对象返回<br/>PDO::FETCH_ASSOC<br/>&nbsp;&nbsp;&nbsp;&nbsp;仅仅返回以键值作为下标的查询的结果集，名称相同的数据只返回一个<br/>PDO::FETCH_NAMED<br/>&nbsp;&nbsp;&nbsp;&nbsp;仅仅返回以键值作为下标的查询的结果集，名称相同的数据以数组形式返回<br/>PDO::FETCH_NUM<br/>&nbsp;&nbsp;&nbsp;&nbsp;仅仅返回以数字作为下标的查询的结果集<br/>PDO::FETCH_BOTH<br/>&nbsp;&nbsp;&nbsp;&nbsp;同时返回以键值和数字作为下标的查询的结果集<br/>PDO::FETCH_OBJ<br/>&nbsp;&nbsp;&nbsp;&nbsp;以对象的形式返回结果集<br/>PDO::FETCH_BOUND<br/>&nbsp;&nbsp;&nbsp;&nbsp;将PDOStatement::bindParam()和PDOStatement::bindColumn()所绑定的值作为变量名赋值后返回<br/>PDO::FETCH_COLUMN<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示仅仅返回结果集中的某一列<br/>PDO::FETCH_CLASS<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示以类的形式返回结果集<br/>PDO::FETCH_INTO<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示将数据合并入一个存在的类中进行返回<br/>PDO::FETCH_FUNC<br/>PDO::FETCH_GROUP<br/>PDO::FETCH_UNIQUE<br/>PDO::FETCH_KEY_PAIR<br/>&nbsp;&nbsp;&nbsp;&nbsp;以首个键值下表，后面数字下表的形式返回结果集<br/>PDO::FETCH_CLASSTYPE<br/>PDO::FETCH_SERIALIZE<br/>&nbsp;&nbsp;&nbsp;&nbsp;表示将数据合并入一个存在的类中并序列化返回<br/>PDO::FETCH_PROPS_LATE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Available since PHP 5.2.0<br/>PDO::ATTR_AUTOCOMMIT<br/>&nbsp;&nbsp;&nbsp;&nbsp;在设置成true的时候，PDO会自动尝试停止接受委托，开始执行<br/>PDO::ATTR_PREFETCH<br/>&nbsp;&nbsp;&nbsp;&nbsp;设置应用程序提前获取的数据大小，并非所有的数据库哦度支持<br/>PDO::ATTR_TIMEOUT<br/>&nbsp;&nbsp;&nbsp;&nbsp;设置连接数据库超时的值<br/>PDO::ATTR_ERRMODE<br/>&nbsp;&nbsp;&nbsp;&nbsp;设置Error处理的模式<br/>PDO::ATTR_SERVER_VERSION<br/>&nbsp;&nbsp;&nbsp;&nbsp;只读属性，表示PDO连接的服务器端数据库版本<br/>PDO::ATTR_CLIENT_VERSION<br/>&nbsp;&nbsp;&nbsp;&nbsp;只读属性，表示PDO连接的客户端PDO驱动版本<br/>PDO::ATTR_SERVER_INFO<br/>&nbsp;&nbsp;&nbsp;&nbsp;只读属性，表示PDO连接的服务器的meta信息<br/>PDO::ATTR_CONNECTION_STATUS<br/>PDO::ATTR_CASE<br/>&nbsp;&nbsp;&nbsp;&nbsp;通过PDO::CASE_*中的内容对列的形式进行操作<br/>PDO::ATTR_CURSOR_NAME<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取或者设定指针的名称<br/>PDO::ATTR_CURSOR<br/>&nbsp;&nbsp;&nbsp;&nbsp;设置指针的类型，PDO现在支持PDO::CURSOR_FWDONLY和PDO::CURSOR_FWDONLY<br/>PDO::ATTR_DRIVER_NAME<br/>&nbsp;&nbsp;&nbsp;&nbsp;返回使用的PDO驱动的名称<br/>PDO::ATTR_ORACLE_NULLS<br/>&nbsp;&nbsp;&nbsp;&nbsp;将返回的空字符串转换为SQL的NULL<br/>PDO::ATTR_PERSISTENT<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取一个存在的连接<br/>PDO::ATTR_STATEMENT_CLASS<br/>PDO::ATTR_FETCH_CATALOG_NAMES<br/>&nbsp;&nbsp;&nbsp;&nbsp;在返回的结果集中，使用自定义目录名称来代替字段名。<br/>PDO::ATTR_FETCH_TABLE_NAMES<br/>&nbsp;&nbsp;&nbsp;&nbsp;在返回的结果集中，使用自定义表格名称来代替字段名。<br/>PDO::ATTR_STRINGIFY_FETCHES<br/>PDO::ATTR_MAX_COLUMN_LEN<br/>PDO::ATTR_DEFAULT_FETCH_MODE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Available since PHP 5.2.0<br/>PDO::ATTR_EMULATE_PREPARES<br/>&nbsp;&nbsp;&nbsp;&nbsp;Available since PHP 5.1.3.<br/>PDO::ERRMODE_SILENT<br/>&nbsp;&nbsp;&nbsp;&nbsp;发生错误时不汇报任何的错误信息，是默认值<br/>PDO::ERRMODE_WARNING<br/>&nbsp;&nbsp;&nbsp;&nbsp;发生错误时发出一条php的E_WARNING的信息<br/>PDO::ERRMODE_EXCEPTION<br/>&nbsp;&nbsp;&nbsp;&nbsp;发生错误时抛出一个PDOException<br/>PDO::CASE_NATURAL<br/>&nbsp;&nbsp;&nbsp;&nbsp;回复列的默认显示格式<br/>PDO::CASE_LOWER<br/>&nbsp;&nbsp;&nbsp;&nbsp;强制列的名字小写<br/>PDO::CASE_UPPER<br/>&nbsp;&nbsp;&nbsp;&nbsp;强制列的名字大写<br/>PDO::NULL_NATURAL<br/>PDO::NULL_EMPTY_STRING<br/>PDO::NULL_TO_STRING<br/>PDO::FETCH_ORI_NEXT<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中的下一行数据，仅在有指针功能时有效<br/>PDO::FETCH_ORI_PRIOR<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中的上一行数据，仅在有指针功能时有效<br/>PDO::FETCH_ORI_FIRST<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中的第一行数据，仅在有指针功能时有效<br/>PDO::FETCH_ORI_LAST<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中的最后一行数据，仅在有指针功能时有效<br/>PDO::FETCH_ORI_ABS<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中的某一行数据，仅在有指针功能时有效<br/>PDO::FETCH_ORI_REL<br/>&nbsp;&nbsp;&nbsp;&nbsp;获取结果集中当前行后某行的数据，仅在有指针功能时有效<br/>PDO::CURSOR_FWDONLY<br/>&nbsp;&nbsp;&nbsp;&nbsp;建立一个只能向后的指针操作对象<br/>PDO::CURSOR_SCROLL<br/>&nbsp;&nbsp;&nbsp;&nbsp;建立一个指针操作对象，传递PDO::FETCH_ORI_*中的内容来控制结果集<br/>PDO::ERR_NONE (string)<br/>&nbsp;&nbsp;&nbsp;&nbsp;设定没有错误时候的错误信息<br/>PDO::PARAM_EVT_ALLOC<br/>&nbsp;&nbsp;&nbsp;&nbsp;Allocation event<br/>PDO::PARAM_EVT_FREE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Deallocation event<br/>PDO::PARAM_EVT_EXEC_PRE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Event triggered prior to execution of a prepared statement.<br/>PDO::PARAM_EVT_EXEC_POST<br/>&nbsp;&nbsp;&nbsp;&nbsp;Event triggered subsequent to execution of a prepared statement.<br/>PDO::PARAM_EVT_FETCH_PRE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Event triggered prior to fetching a result from a resultset.<br/>PDO::PARAM_EVT_FETCH_POST<br/>&nbsp;&nbsp;&nbsp;&nbsp;Event triggered subsequent to fetching a result from a resultset.<br/>PDO::PARAM_EVT_NORMALIZE<br/>&nbsp;&nbsp;&nbsp;&nbsp;Event triggered during bound parameter registration allowing the driver to normalize the parameter name.<br/><br/>PDO->getAvailableDrivers()方法的作用是获取有效的PDO驱动器名称。<br/><br/>PDO->errorInfo()方法的作用获取错误的信息，PDO->errorCode()方法的作用是获取错误码。<br/><?php<br/>$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br/>$dbh->query('set names utf8;');<br/>$sql = "INSERT INTO `test`.`table` (`name` ,`ageeeeee`)VALUES ('mick', 22);";<br/>$dbh->query($sql);<br/>print_r($dbh->errorInfo());<br/>/**<br/>* Array<br/>* (<br/>*&nbsp;&nbsp;&nbsp;&nbsp; [0] => 42S22<br/>*&nbsp;&nbsp;&nbsp;&nbsp; [1] => 1054<br/>*&nbsp;&nbsp;&nbsp;&nbsp; [2] => Unknown column 'ageeeeee' in 'field list'<br/>* )<br/>*/<br/>?><br/><br/>PDO->__construct()方法的作用是建立一个PDO链接数据库的实例。<br/><br/>PDO->beginTransaction()，PDO->commit()，PDO->rollBack()这三个方法是在支持回滚功能时一起使用的。PDO->beginTransaction()方法标明起始点，PDO->commit()方法标明回滚结束点，并执行SQL，PDO->rollBack()执行回滚。<br/><?php<br/>try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->query('set names utf8;');<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->beginTransaction();<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->commit();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125; catch (Exception $e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$dbh->rollBack();<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo "Failed: " . $e->getMessage();<br/>&#125;<br/>?> 
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 转：PHP中的PDO函数库（PDO Functions）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>