PDO是什么?
PDO(PHP Data Object)提供了轻量级的访问PHP数据库的接口。PDO提供了数据访问的抽象层,这意味着无论使用什么数据库,都可以用同样的方法来操作数据库。
使用PDO之前必须要修改php.ini文件
保证以下两行前面的分号去掉extension=php_pdo.dll
extension=php_pdo_mysql.dll连接数据库<?php
$dsn = "mysql:dbname=mydb;host=127.0.0.1";/*定义数据源的名称 DSN(data source name)*/
$user = "root";
$password = "123456";
try{
$dbh = new PDO($dsn,$user,$password);
}catch(PDOException $e){ /*如果连接错误,会抛出PDOException异常*/
echo "Connection failed!".$e->getMessage();
}
如何关闭连接?$dbh = null;/*注意,与PDO对象有关的所有对象也应该关闭,即设置为null*/
如何设置数据库的持久连接?$dbh = new PDO("odbc:SAMPLE", "db2inst1", "ibmdb2",
array(PDO::ATTR_PERSISTENT => true));/*不建议使用持久连接*/
2.执行sql语句
使用PDO对象的query()方法$dbh = new PDO($dsn,$user,$password);
foreach($dbh->query("select * from test") as $row)/*执行查询语句*/
echo $row["id"]."
";
如果需要其他sql语句,只需讲sql语句传递给query()方法执行即可。例如$dbh->query("insert into test values(10000)");
3.提交事务与回滚事务$dbh->beginTransaction(); /*开始一个事务*/
$dbh->exec("insert into test values(45)");
$dbh->commit();/*提交一个事务*/$dbh->beginTransaction();
$dbh->exec("insert into test values(48)");
$dbh->rollBack();/*撤销一个事务 48没有被插入*/
4.预编译语句
使用预编译语句可以在执行的时候动态为sql语句绑定参数,这样做可以有两个好处sql语句只需要解析一次,就可以通过绑定不同的参数执行多次,节约系统资源。
有效的防止sql注入。$stmt = $dbh->prepare("insert into test values(:id)");/*预编译语句*/
$stmt->bindParam(":id",$id);/*绑定参数*/
$id = 111;
$stmt->execute();/*执行*/$stmt = $dbh->prepare("insert into test values(?)");/*预编译语句 也可以通过?作为占位符*/
$stmt->bindParam(1,$id);/*绑定参数*/
$id = 111;
$stmt->execute();/*执行*/
执行预编译的查询语句$stmt = $dbh->prepare("select * from test where id=?");
$stmt->execute(array(111));/*参数必须是数组类型*/
while($row = $stmt->fetch())/*取出结果*/
print $row["id"];
注意,下面占位符的指定是无效的。<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE "%?%"");/注意,占位符必须占据整个
值的位置/
$stmt->execute(array($_GET["name"]));
/*下面的指定才是正确的*/
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
关于PDO更多的用法,请自行查找PHP mannual.