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"]."<br>"; }
如果需要其他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.
时间: 2024-10-13 23:28:54