硅谷论坛's Archiver

蓝冰 发表于 2007-12-23 15:45

PHP5中PDO的使用

<FONT color=#000080>PDO</FONT>(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的php_mysql.dll之类的了,那怎么办捏, 我们只有与时俱进了,我就小试了一把PDO。(本文只是入门级的,高手可以略过,呵呵)
<P><BR><FONT size=4>【PDO是啥】</FONT></P>
<P>PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 <FONT color=#000080>php_mysql.dll</FONT>、<FONT color=#000080>php_pgsql.dll</FONT>、<FONT color=#000080>php_mssql.dll</FONT>、<FONT color=#000080>php_sqlite.dll</FONT>等等扩展来连接<FONT color=#000080>MySQL</FONT>、<FONT color=#003366>PostgreSQL</FONT>、<FONT color=#000080>MS SQL Server</FONT>、<FONT color=#000080>SQLite</FONT>,同样的,我们必须借助 <FONT color=#000080>ADOdb</FONT>、<FONT color=#000080>PEAR::DB</FONT>、<FONT color=#000080>PHPlib::DB</FONT>之类的数据库抽象类来帮助我们,无比烦琐和低效,毕竟,php代码的效率怎么能够我们直接用C/C++写的扩展斜率高捏?所以嘛,PDO的出现是必然的,大家要平静学习的心态去接受使用,也许你会发现能够减少你不少功夫哦。</P>
<P></P>
<P><FONT size=4>【安装PDO】</FONT></P>
<P>我是在Windows XP SP2 上面,所以嘛,整个过程都是在Windows行进行的啦,至于Linux/FreeBSD 等平台,请自行查找资料设置安装。<BR>我的是PHP 5.1.4,已经自带有了php_pdo.dll的扩展,不过需要稍微设置一下才能使用。</P>
<P>打开 <FONT color=#000080>c:\windows\php.ini</FONT> ,那是我的PHP配置文件,找到下面这行:<BR>extension_dir<BR>这个就是我们扩展存在的目录,我的PHP 5扩展是在:<FONT color=#000080>C:\php5\ext</FONT>,那么我就把这行改成:</P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><SPAN style="COLOR: rgb(0,0,0)">extension_dir </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">C:/php5/ext</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN></DIV></DIV>
<P><BR>然后再往php.ini下面找到:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><SPAN style="COLOR: rgb(0,128,0)">;</SPAN><SPAN style="COLOR: rgb(0,128,0)">;;;;;;;;;;;;;;;;;;;;;</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR>;</SPAN><SPAN style="COLOR: rgb(0,128,0)"> Dynamic Extensions ;</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR>;</SPAN><SPAN style="COLOR: rgb(0,128,0)">;;;;;;;;;;;;;;;;;;;;;</SPAN></DIV></DIV>
<P><BR>下面有一堆类似 ;extension=php_mbstring.dll 的东西,这里就是PHP扩展加载的配置了,我们再最后面添加上我们PDO的扩展:</P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><SPAN style="COLOR: rgb(0,0,0)">extension=php_pdo.dll<BR>extension=php_pdo_mysql.dll<BR>extension=php_pdo_pgsql.dll<BR>extension=php_pdo_sqlite.dll<BR>extension=php_pdo_mssql.dll<BR>extension=php_pdo_odbc.dll<BR>extension=php_pdo_firebird.dll<BR><FONT color=#339933>;extension=php_pdo_oci8.dll</FONT></SPAN></DIV></DIV>
<P><BR>各种PDO的驱动,能给加上的全给加上,不过后面的php_pdo_oci8.dll,因为我没有安装Oralce数据库,所以没有这个, 就使用分号注释掉它。然后重启我们的Web服务器, IIS/Apache,我的是IIS,嘿嘿,表鄙视我,在Windows上,简单嘛。<BR>重启后,在我们Web服务器的文档目录下写一个phpinfo.php的文件,加上这些:<BR><BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV>&lt;?<BR><FONT color=#009933>phpinfo</FONT>();<BR>?&gt;</DIV></DIV>
<P><BR>然后打开我们可爱的浏览器:IE/FireFox,我的是FireFox 2.0,刚下载的,很爽,不怕流氓软件,哈哈。<BR>在浏览器里面输入:<A href="http://localhost/phpinfo.php"><U><FONT color=#0000ff>http://localhost/phpinfo.php</FONT></U></A>,如果你的这个页面路径不一致,请自行输入。<BR>输出的内容中,如果你能够顺利的看到:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">PDO<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>PDO support enabled<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>PDO drivers&nbsp;&nbsp; mysql</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> pgsql</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> sqlite</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> mssql</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> odbc</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> firebird&nbsp;&nbsp;</SPAN></DIV></DIV><BR>后面有各种驱动的说明,<BR><SPAN style="COLOR: rgb(153,51,0)">PDO_Firebird,pdo_mssql,pdo_mysql,PDO_ODBC,pdo_pgsql,pdo_sqlite</SPAN>
<P></P>
<P>那么,恭喜你安装成功了,否则请仔细检查上面的步骤。</P>

蓝冰 发表于 2007-12-23 15:46

PHP5中PDO的使用-2

<P><FONT size=4>【牛刀小小试验】</FONT></P>
<P>我用的是MySQL 4.0.26,但是我个人推荐大家使用 MySQL 4.1.x 或者 MySQL 5.0.x,因为那些版本有很多有趣的东西值得去学习。我们这里PDO需要连接的就是我的MySQL 4.0啦,如果你没有安装MySQL,请自行安装。我们建立好了MySQL,并且在test库里添加了表foo,包括 id,name,gender,time等四个字段。</P>
<P>我们开始构造第一个PDO应用,建立一个pdo.php文件在Web文档目录下:</P>
<P><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$dsn</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">mysql:host=localhost;dbname=test</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">new</SPAN><SPAN style="COLOR: rgb(0,0,0)"> PDO(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$dsn</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">root</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">''</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$count</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,128,128)">exec</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">echo</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$count</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">null</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><SPAN style="COLOR: rgb(0,0,0)"></SPAN><BR>
<P></P>
<P>不明白啥意思,俺们来慢慢讲讲。这行:<BR><SPAN style="COLOR: rgb(0,0,255)">$dsn = "mysql:host=localhost;dbname=test";</SPAN><BR>就是构造我们的DSN(数据源),看看里面的信息包括:数据库类型是mysql,主机地址是localhost,数据库名称是test,就这么几个信息。不同数据库的数据源构造方式是不一样的。</P>
<P><SPAN style="COLOR: rgb(0,0,255)">$db = new PDO($dsn, 'root', '');</SPAN><BR>初始化一个PDO对象,构造函数的参数第一个就是我们的数据源,第二个是连接数据库服务器的用户,第三个参数是密码。我们不能保证连接成功,后面我们会讲到异常情况,这里我们姑且认为它是连接成功的。</P>
<P><SPAN style="COLOR: rgb(0,0,255)">$count = $db-&gt;exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");</SPAN><BR style="COLOR: rgb(0,0,255)"><SPAN style="COLOR: rgb(0,0,255)">echo $count;</SPAN><BR>调用我们连接成功的PDO对象来执行一个查询,这个查询是一个插入一条记录的操作,使用PDO::exec() 方法会返回一个影响记录的结果,所以我们输出这个结果。最后还是需要结束对象资源:<BR><SPAN style="COLOR: rgb(0,0,255)">$db = null;</SPAN></P>
<P>默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:<SPAN style="COLOR: rgb(0,0,128)">array(PDO::ATTR_PERSISTENT =&gt; true) </SPAN>变成这样:<BR><SPAN style="COLOR: rgb(0,0,255)">$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT =&gt; true));</SPAN></P>
<P>一次操作就这么简单,也许跟以前的没有太大区别,跟ADOdb倒是有几分相似。</P>

蓝冰 发表于 2007-12-23 15:47

PHP5中PDO的使用-3

<P><FONT size=4>【继续了解】</FONT></P>
<P>如果我们想提取数据的话,那么就应该使用数据获取功能。(下面用到的$db都是上面已经连接好的对象)<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">foreach</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT * FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">)){<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$row</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>我们也可以使用这种获取方式:<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT * FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">while</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$row</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetch()){<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$row</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>如果想一次把数据都获取到数组里可以这样:<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT * FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$result_arr</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetchAll();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$result_arr</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>
<P></P>
<P>输出:<SPAN style="COLOR: rgb(0,0,0)"></SPAN></P>
<P><SPAN style="COLOR: rgb(0,0,0)"></SPAN></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,255)">Array</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">0</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">Array</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [id] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">1</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">0</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">1</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [name] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> heiyeluren<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">1</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> heiyeluren<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [gender] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> 男<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">2</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt; 男<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [time] =&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">2006</SPAN><SPAN style="COLOR: rgb(0,0,0)">-</SPAN><SPAN style="COLOR: rgb(0,0,0)">10</SPAN><SPAN style="COLOR: rgb(0,0,0)">-</SPAN><SPAN style="COLOR: rgb(0,0,0)">28</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">23</SPAN><SPAN style="COLOR: rgb(0,0,0)">:</SPAN><SPAN style="COLOR: rgb(0,0,0)">14</SPAN><SPAN style="COLOR: rgb(0,0,0)">:</SPAN><SPAN style="COLOR: rgb(0,0,0)">23</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">3</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">2006</SPAN><SPAN style="COLOR: rgb(0,0,0)">-</SPAN><SPAN style="COLOR: rgb(0,0,0)">10</SPAN><SPAN style="COLOR: rgb(0,0,0)">-</SPAN><SPAN style="COLOR: rgb(0,0,0)">28</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">23</SPAN><SPAN style="COLOR: rgb(0,0,0)">:</SPAN><SPAN style="COLOR: rgb(0,0,0)">14</SPAN><SPAN style="COLOR: rgb(0,0,0)">:</SPAN><SPAN style="COLOR: rgb(0,0,0)">23</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}</SPAN></DIV></DIV><BR><BR>我们看里面的记录,数字索引和关联索引都有,浪费资源,我们只需要关联索引的:<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">setAttribute(PDO</SPAN><SPAN style="COLOR: rgb(0,0,0)">::</SPAN><SPAN style="COLOR: rgb(0,0,0)">ATTR_CASE</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> PDO</SPAN><SPAN style="COLOR: rgb(0,0,0)">::</SPAN><SPAN style="COLOR: rgb(0,0,0)">CASE_UPPER);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT * FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">setFetchMode(PDO</SPAN><SPAN style="COLOR: rgb(0,0,0)">::</SPAN><SPAN style="COLOR: rgb(0,0,0)">FETCH_ASSOC);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$result_arr</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetchAll();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$result_arr</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>看 上面的代码,setAttribute() 方法是设置部分属性,主要属性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等等,我们这里需要设置的是PDO:: ATTR_CASE,就是我们使用关联索引获取数据集的时候,关联索引是大写还是小写,有几个选择:<BR><BR><SPAN style="COLOR: rgb(0,0,128)">PDO::CASE_LOWER</SPAN> -- 强制列名是小写<BR><SPAN style="COLOR: rgb(0,0,128)">PDO::CASE_NATURAL </SPAN>-- 列名按照原始的方式<BR><SPAN style="COLOR: rgb(0,0,128)">PDO::CASE_UPPER </SPAN>-- 强制列名为大写
<P></P>
<P>我们使用setFetchMode方法来设置获取结果集的返回值的类型,同样类型还有:<BR><SPAN style="COLOR: rgb(0,0,128)"><SPAN style="COLOR: rgb(153,51,0)"><BR>PDO::FETCH_ASSOC</SPAN> </SPAN>-- 关联数组形式<BR><SPAN style="COLOR: rgb(153,51,0)">PDO::FETCH_NUM </SPAN>-- 数字索引数组形式<BR><SPAN style="COLOR: rgb(153,51,0)">PDO::FETCH_BOTH </SPAN>-- 两者数组形式都有,这是缺省的<BR><SPAN style="COLOR: rgb(153,51,0)">PDO::FETCH_OBJ</SPAN> -- 按照对象的形式,类似于以前的 mysql_fetch_object()</P>
<P>当然,一般情况下我们是使用PDO::FETCH_ASSOC,具体使用什么,按照你自己的需要,其他获取类型参考手册。</P>
<P><BR>除了上面这种获取数据的方式,还有这种:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">prepare(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT * FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">execute();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">while</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$row</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetch()){<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$row</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>其实差不多啦。如果你想获取指定记录里一个字段结果的话,可以使用 <SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetchColumn():</SPAN><BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT COUNT(*) FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$col</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetchColumn();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">echo</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$col</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR>一般使用fetchColumn()来进行count统计或者某些只需要单字段的记录很好操作。
<P></P>
<P><BR><SPAN style="FONT-WEIGHT: bold">简单的总结一下上面的操作:</SPAN></P>
<P>查询操作主要是<SPAN style="COLOR: rgb(0,0,255)">PDO::query()</SPAN>、<SPAN style="COLOR: rgb(0,0,255)">PDO::exec()</SPAN>、<SPAN style="COLOR: rgb(0,0,255)">PDO::prepare()</SPAN>。<SPAN style="COLOR: rgb(0,0,255)">PDO::query()</SPAN>主要是用于有记录结果返回的操作,特别是SELECT操作,PDO::exec()主要是针对没有结果集合返回的操作,比如<SPAN style="COLOR: rgb(153,51,0)">INSERT、UPDATE、DELETE</SPAN>等操作,它返回的结果是当前操作影响的列数。<SPAN style="COLOR: rgb(0,0,255)">PDO::prepare()</SPAN>主要是预处理操作,需要通过<SPAN style="COLOR: rgb(0,0,255)">$rs-&gt;execute()</SPAN>来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。</P>
<P>获取结果集操作主要是:<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetchColumn()</SPAN>、<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetch()</SPAN>、<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetchALL()</SPAN>。<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetchColumn()</SPAN> 是获取结果指定第一条记录的某个字段,缺省是第一个字段。<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetch()</SPAN> 是用来获取一条记录,<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::fetchAll()</SPAN>是获取所有记录集到一个中,获取结果可以通过<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::setFetchMode</SPAN>来设置需要结果集合的类型。</P>
<P>另外有两个周边的操作,一个是<SPAN style="COLOR: rgb(0,0,255)">PDO::lastInsertId()</SPAN>和<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::rowCount()</SPAN>。<SPAN style="COLOR: rgb(0,0,255)">PDO::lastInsertId()</SPAN>是返回上次插入操作,主键列类型是自增的最后的自增ID。<SPAN style="COLOR: rgb(0,0,255)">PDOStatement::rowCount()</SPAN>主要是用于<SPAN style="COLOR: rgb(0,0,255)">PDO::query()</SPAN>和<SPAN style="COLOR: rgb(0,0,255)">PDO::prepare()</SPAN>进行<SPAN style="COLOR: rgb(153,51,0)">DELETE、INSERT、UPDATE</SPAN>操作影响的结果集,对<SPAN style="COLOR: rgb(0,0,255)">PDO::exec()</SPAN>方法和<SPAN style="COLOR: rgb(153,51,0)">SELECT</SPAN>操作无效。</P>

蓝冰 发表于 2007-12-23 15:47

PHP5中PDO的使用-4

<P><FONT size=4>【错误处理】</FONT></P>
<P>如果程序中碰到错误咋办?我们这里描述PDO类的错误信息和异常处理。</P>
<P style="FONT-WEIGHT: bold">1. 面向对象的方式</P>
<P>先看看如果连接错误等的处理,使用面向对象的方式来处理:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">try</SPAN><SPAN style="COLOR: rgb(0,0,0)"> {<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">new</SPAN><SPAN style="COLOR: rgb(0,0,0)"> PDO(</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">mysql:host=localhost;dbname=test</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$user</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$pass</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">null</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>} </SPAN><SPAN style="COLOR: rgb(0,0,255)">catch</SPAN><SPAN style="COLOR: rgb(0,0,0)"> (PDOException </SPAN><SPAN style="COLOR: rgb(128,0,128)">$e</SPAN><SPAN style="COLOR: rgb(0,0,0)">) {<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">print</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">Error: </SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">.</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$e</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">getMessage() </SPAN><SPAN style="COLOR: rgb(0,0,0)">.</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">&lt;br/&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">die</SPAN><SPAN style="COLOR: rgb(0,0,0)">();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR>
<P></P>
<P>这里利用我们PHP 5面向对象的异常处理特征,如果里面有异常的话就初始化调用PDOException来初始化一个异常类。<BR>PDOException异常类的属性结构:</P>
<P></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">class</SPAN><SPAN style="COLOR: rgb(0,0,0)"> PDOException </SPAN><SPAN style="COLOR: rgb(0,0,255)">extends</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">Exception</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>{<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">public</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$errorInfo</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">null</SPAN><SPAN style="COLOR: rgb(0,0,0)">; </SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 错误信息,可以调用 PDO::errorInfo() 或 PDOStatement::errorInfo()来访问</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$message</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 异常信息,可以试用 Exception::getMessage() 来访问</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$code</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> SQL状态错误代码,可以使用 Exception::getCode() 来访问</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR>
<P></P>
<P>这个异常处理类是集成PHP 5内置的异常处理类,我们简单的看一下PHP 5内置的异常处理类结构:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)">php<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">class</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">Exception</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>{<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 属性</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$message</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">Unknown exception</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 异常信息</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$code</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">0</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 用户自定义异常代码</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$file</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 发生异常的文件名</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">protected</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$line</SPAN><SPAN style="COLOR: rgb(0,0,0)">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 发生异常的代码行号<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp; // 方法</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getMessage();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 返回异常信息</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getCode();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 返回异常代码</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getFile();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 返回发生异常的文件名</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getLine();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 返回发生异常的代码行号</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> backtrace() 数组</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">final</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">function</SPAN><SPAN style="COLOR: rgb(0,0,0)"> getTraceAsString();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,0)">//</SPAN><SPAN style="COLOR: rgb(0,128,0)"> 已格成化成字符串的 getTrace() 信息</SPAN><SPAN style="COLOR: rgb(0,128,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
<P></P><BR>
<P>相应的,在代码中可以合适的调用 <SPAN style="COLOR: rgb(0,0,255)">getFile()</SPAN> 和 <SPAN style="COLOR: rgb(0,0,255)">getLine()</SPAN> 来进行错误定位,更方便的进行调试。</P>
<P><BR><SPAN style="FONT-WEIGHT: bold">2. 使用面向过程的方法</SPAN><BR>先看代码:<BR><BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,0)">&lt;?</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">new</SPAN><SPAN style="COLOR: rgb(0,0,0)"> PDO(</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">mysql:host=localhost;dbname=test</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$user</SPAN><SPAN style="COLOR: rgb(0,0,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$pass</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">query(</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">SELECT aa,bb,cc FROM foo</SPAN><SPAN style="COLOR: rgb(0,0,0)">"</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,255)">if</SPAN><SPAN style="COLOR: rgb(0,0,0)"> (</SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">errorCode() </SPAN><SPAN style="COLOR: rgb(0,0,0)">!=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">00000</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">){<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">errorInfo());<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: rgb(0,0,255)">exit</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$arr</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(128,0,128)">$rs</SPAN><SPAN style="COLOR: rgb(0,0,0)">-&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)">fetchAll();<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,128,128)">print_r</SPAN><SPAN style="COLOR: rgb(0,0,0)">(</SPAN><SPAN style="COLOR: rgb(128,0,128)">$arr</SPAN><SPAN style="COLOR: rgb(0,0,0)">);<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(128,0,128)">$db</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">null</SPAN><SPAN style="COLOR: rgb(0,0,0)">;<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: rgb(0,0,0)">?&gt;</SPAN></DIV></DIV><BR><BR>PDO和PDOStatement对象有<SPAN style="COLOR: rgb(0,0,255)">errorCode()</SPAN> 和 <SPAN style="COLOR: rgb(0,0,255)">errorInfo()</SPAN> 方法,如果没有任何错误, <SPAN style="COLOR: rgb(0,0,255)">errorCode() </SPAN>返回的是: <SPAN style="COLOR: rgb(153,51,0)">00000</SPAN> ,否则就会返回一些错误代码。<SPAN style="COLOR: rgb(0,0,255)">errorInfo()</SPAN> 返回的一个数组,包括PHP定义的错误代码和MySQL的错误代码和错误信息,数组结构如下:<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<DIV><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: rgb(0,0,255)">Array</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>(<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">0</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> 42S22<BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">1</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,0)">1054</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="COLOR: rgb(0,0,0)">2</SPAN><SPAN style="COLOR: rgb(0,0,0)">] </SPAN><SPAN style="COLOR: rgb(0,0,0)">=&gt;</SPAN><SPAN style="COLOR: rgb(0,0,0)"> Unknown column </SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">aaa</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)"> in </SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)">field list</SPAN><SPAN style="COLOR: rgb(0,0,0)">'</SPAN><SPAN style="COLOR: rgb(0,0,0)"><BR><IMG src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>)</SPAN></DIV></DIV>
<P></P>
<P>每次执行查询以后,errorCode() 的结果都是最新的,所以我们可以很容易自己控制错误信息显示。</P>
<P></P>
<P><FONT size=4>【简单总结】</FONT></P>
<P>从上面的使用看出,PDO功能确实强大,另外还有一些内容我没有讲到,比如绑定参数、预处理、存储过程、事务处理等等功能。另外还有不同数据扩 DSN的构造,Oracle数据库自己很多特殊的东西,都需要深入去学习理解,这篇文章就只是简单的描述了一些入门知识,算是对PDO一个简单的了解吧。</P>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.