<?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::rollBack()事务处理]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 04 Jan 2009 05:28:18 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	转：http://www.5ga.cn/blog/archives/2008/12/1064<br/>最近对我的PHP后台框架进行些升级维护,决定引入JQuery,和PHP的一个数据库模块PDO,以前用的是自己写的类,作为方便以后使用其他数据库备用,由于现在的PDO中文帮助还是比较少,所以做一个笔记.<br/><br/>各各扩展所对应的数据库是：<br/><br/>Driver name Supported databases<br/>PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase<br/>PDO_FIREBIRD Firebird/Interbase 6<br/>PDO_INFORMIX IBM Informix Dynamic Server<br/>PDO_MYSQL MySQL 3.x/4.x<br/>PDO_OCI Oracle Call Interface<br/>PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)<br/>PDO_PGSQL PostgreSQL<br/>PDO_SQLITE SQLite 3 and SQLite 2<br/><br/><br/><div class="code">&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user=’root’;//数据库连接用户名<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pass=”;//对应的密码<br/>&nbsp;&nbsp; 3.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&#123;<br/>&nbsp;&nbsp; 4.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass,array(PDO::ATTR_PERSISTENT =&gt; true));//初始化PDO对象<br/>&nbsp;&nbsp; 5.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//默认这个不是长连接，如果需要数据库长连接，需要最后加一个参数：array(PDO::ATTR_PERSISTENT =&gt; true)<br/>&nbsp;&nbsp; 6.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db = new PDO(’数据库类型:host=主机地址;dbname=数据库名’,用户名,密码,array(PDO::ATTR_PERSISTENT =&gt; true));<br/>&nbsp;&nbsp; 7.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $db-&gt;query(’SET NAMES &#92;’utf8&#92;”);//设置连接数据库的语言环境<br/>&nbsp;&nbsp; 8.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;连接成功&quot;;<br/>&nbsp;&nbsp; 9.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*你还可以进行一次搜索操作<br/>&nbsp;&nbsp;10.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach($dbh-&gt;query(’SELECT * from gaga’)as $row)&#123;<br/>&nbsp;&nbsp;11.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_r($row);//你可以用 echo($GLOBAL); 来看到这些值<br/>&nbsp;&nbsp;12.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;13.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;14.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//$db = null;<br/>&nbsp;&nbsp;15.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;catch(PDOException$e)&#123;<br/>&nbsp;&nbsp;16.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die(’数据库连接错误: ‘.$e-&gt;getMessage().’<br/>&nbsp;&nbsp;17.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘);<br/>&nbsp;&nbsp;18.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;</div><br/><br/>$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER); //设置属性<br/><br/>下面列出多有PDO::setAttribute()的参数：<br/><br/>PDO::ATTR_CASE: 强制列名变成一种格式，详细如下(第二个参数)：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::CASE_LOWER: 强制列名是小写.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::CASE_NATURAL: 列名按照原始的方式<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::CASE_UPPER: 强制列名为大写.<br/><br/>PDO::ATTR_ERRMODE: 错误提示.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::ERRMODE_SILENT: 不显示错误信息，只显示错误码.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::ERRMODE_WARNING: 显示警告错误.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::ERRMODE_EXCEPTION: 抛出异常.<br/><br/>PDO::ATTR_ORACLE_NULLS(不仅仅是ORACLE有效，别的数据库也有效): ）指定数据库返回的NULL值在php中对应的数值。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::NULL_NATURAL: 不变.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::NULL_EMPTY_STRING: Empty string is converted toNULL.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* PDO::NULL_TO_STRING: NULL is converted to an empty string.<br/><br/>PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requiresbool.<br/><br/>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)).<br/><br/>PDO::ATTR_AUTOCOMMIT(available in OCI, Firebird and MySQL): Whether to autocommit every single statement.<br/><br/>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY(available in MySQL): Use buffered queries.<br/><br/>查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。<br/><br/>PDO::query()主要是用于有记录结果返回的操作，特别是SELECT操作，<br/>PDO::exec()主要是针对没有结果集合返回的操作，比如INSERT、UPDATE、DELETE等操作，它返回的结果是当前操作影响的列数。<br/>PDO::prepare()主要是预处理操作，需要通过$rs->execute()来执行预处理里面的SQL语句，这个方法可以绑定参数，功能比较强大，不是本文能够简单说明白的，大家可以参考手册和其他文档。<br/><br/>获取结果集操作主要是：PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。<br/>PDOStatement::fetchColumn()是获取结果指定第一条记录的某个字段，缺省是第一个字段。<br/>PDOStatement::fetch()是用来获取一条记录，<br/>PDOStatement::fetchAll()是获取所有记录集到一个中，获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。<br/><br/>另外有两个周边的操作，一个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是返回上次插入操作，主键列类型是自增的最后的自增ID。<br/>PDOStatement::rowCount()主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集，对PDO::exec()方法和SELECT操作无效。<br/><br/>事务中，可以使用 PDO::commit() 或 PDO::rollBack() 来结束该事务，这取决于事务中运行的代码是否成功。<br/><br/><br/><div class="code">&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&#123;<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db = new PDO(’odbc:SAMPLE’,&#039;db2inst1′,’ibmdb2′,<br/>&nbsp;&nbsp; 3.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(PDO_ATTR_PERSISTENT=&gt;true));<br/>&nbsp;&nbsp; 4.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Connected&#92;n&quot;;<br/>&nbsp;&nbsp; 5.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_EXCEPTION);<br/>&nbsp;&nbsp; 6.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;beginTransaction();<br/>&nbsp;&nbsp; 7.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;exec(&quot;insert into staff (id, first, last) values (23, ‘Joe’, ‘Bloggs’)&quot;);<br/>&nbsp;&nbsp; 8.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;exec(&quot;insert into salarychange (id, amount, changedate)<br/>&nbsp;&nbsp; 9.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values (23, 50000, NOW())&quot;);<br/>&nbsp;&nbsp;10.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;commit();<br/>&nbsp;&nbsp;11.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;12.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;catch(Exception $e)&#123;<br/>&nbsp;&nbsp;13.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;rollBack();<br/>&nbsp;&nbsp;14.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&quot;Failed: &quot;.$e-&gt;getMessage();<br/>&nbsp;&nbsp;15.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;</div><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() — 返回数据集列的数量对应:num_fields<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() — 返回结果集的下一条.<br/>PDOStatement->fetchAll() — 返回一个数组包含着全部的值<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() — 返回一个数字显示在执行SQL操作后受影响的行数<br/>PDOStatement->setAttribute() — Set a statement attribute<br/>PDOStatement->setFetchMode() — 返回数据库表属性Set the default fetch mode for this statement<br/><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP的PDO模块应用，PDO::rollBack()事务处理]]></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>