PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的php_mysql.dll之类的了
【PDO是啥】
PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩展来连接MySQL、PostgreSQL、MS SQL Server、SQLite,同样的,我们必须借助 ADOdb、PEAR::DB、PHPlib::DB之类的数据库抽象类来帮助我们,无比烦琐和低效,毕竟,php代码的效率怎么能够我们直接用C/C++写的扩展斜率高捏?所以嘛,PDO的出现是必然的.
1先找到配置文件php.ini中以下几项扩展
extension=php_pdo_firebird.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
注:若在linux环境下使用将扩展以下几项:
extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so
2.使用PDO连接数据库(我使用的是sqlite3数据库)
$dsn = 'sqlite:sql.db';
$dbh = new PDO($dsn, $user, $pwd);
$dbh = null; //(unset)
3.一些简单的执行(关键字:exec)
<?php
$dsn = 'sqlite:sql.db';
$dbh = new PDO($dsn, $user, $pwd);
$result = $dbh->exec("INSERT INTO test SET name = 'seal',age='20'");
$result=$dbh->exec("delete from test where name='seal'");
$dbh = null;
?>
执行失败则返回0;
4.查询输出数据常用方法一:
$rs = $dbh->query("select * from test");
while($row = $rs->fetch()){
echo $row[name].$row[age];
}
5.查询数据方法二:
foreach ($dbh->query('SELECT * from test') as $row) {
echo $row[name].$row[age];
}
6.查询数据方法三:
$stmt = $dbh->prepare("select * from test");
if ($stmt->execute()) {
while ($row = $stmt->fetch()) {
print_r($row);
}
}
6.1 PDO::prepare 别类查询方式(execute功能很强大):
$stmt = $dbh->prepare("select * from test where name = ?");
if ($stmt->execute(array("zjh"))) { //zjh为查询的条件
while ($row = $stmt->fetch()) {
print_r($row);
}
}
7.执行的别种方式(也是用execute)
$stmt = $dbh->prepare("insert into test (name, age) values (?, ?)"); //and updata
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $age);
$name = 'one'; // insert one row
$age = 1;
$stmt->execute();
$name = 'two'; // insert another row with different values
$age = 2;
$stmt->execute();
关键字总结
查询操作主要是
PDO::query(): 主要是用于有记录结果返回的操作,特别是SELECT操作
PDO::exec(): 主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数
PDO::prepare(): 主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大
获取结果集操作主要是:
PDOStatement::fetchColumn(): 是获取结果指定第一条记录的某个字段,缺省是第一个字段
PDOStatement::fetch():是用来获取一条记录
PDOStatement::fetchALL():是获取所有记录集到一个中,获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。
另外有两个周边的操作,
PDO::lastInsertId():是返回上次插入操作,主键列类型是自增的最后的自增ID。
PDOStatement::rowCount() :主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。
完整的例子可看PDO.php