pdo是新出来的东西,估计变动也较大,网上的资料可信度太低,把自己被折腾的经历写下来供各位借鉴
很早就看来对pdo的介绍,今天终于把php从4升级至5.1.2
环境 SunOS 5.9,Apache2
一路充满坎坷
1 编译安装
编译的时候指定的pdo对oci的支持 --with-pdo-oci=/oracle/product/9.2.0
make,make install一切正常
phpinfo()无信息显示,查看Apache error_log,发现如下信息
[Tue Mar 14 00:39:11 2006] [notice] child pid 4606 exit signal Segmentation fault (11)
经过无数折腾,无意在一次重启apache时发现
[Tue Mar 14 00:38:59 2006] [notice] Apache/2.0.55 (Unix) PHP/4.4.1 PHP/5.1.2 con
figured -- resuming normal operations
再看httpd.conf,发现
LoadModule php4_module modules/libphp4.so
LoadModule php5_module modules/libphp5.so
-_-!,php4和php5同时加载(记得php5比较智能,会去掉php4的),去掉了对php4的加载,ok
2 连接Oracle
手册里没有讲怎么连OCI
从网上看到这篇,讲了PDO连OCI
“PHP 5.1 的数据对象 (PDO) 抽象层与 Oracle”
按照去做
$dbh = new PDO("OCI:dbname=mydb", "name", "pass");
出错信息:
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver'
phpinfo里明明PDO OCI的已经装好了啊??
还是无意的改动,才发现 OCI 应该小写!!
$dbh = new PDO("oci:dbname=mydb", "name", "pass");
3 查询
写了个简单的查询
[code]$dbh = new PDO("oci:dbname=mydb", "name", "pass");
$stmt = $dbh->prepare("SELECT * from foo");
if ($stmt->execute()) {
while ($row = $stmt->fetch()) {
print_r($row);
print "<br>";
}
}[/code]
一切正常,但字段名都是大写的,不爽,还是刚才那篇文章
$dbh->setAttribute(PDO_ATTR_CASE, PDO_CASE_LOWER);
出错:
Notice: Use of undefined constant PDO_ATTR_CASE - assumed 'PDO_ATTR_CASE'
再查pdo手册,也讲 PDO_ATTR_CASE啊,
又折腾若干,在google里某德文网站搜得,应为:
$dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
至此,折腾完毕
