PHP入门(15)使用PDO操作MySQL数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP入门(15)使用PDO操作MySQL数据库相关的知识,希望对你有一定的参考价值。

PDO是什么?

PDO(php Data Object)提供了轻量级的访问PHP数据库的接口。PDO提供了数据访问的抽象层,这意味着无论使用什么数据库,都可以用同样的方法来操作数据库。


使用PDO之前必须要修改php.ini文件

保证以下两行前面的分号去掉

extension=php_pdo.dll
extension=php_pdo_mysql.dll
  1. 连接数据库

<?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语句绑定参数,这样做可以有两个好处

  1. sql语句只需要解析一次,就可以通过绑定不同的参数执行多次,节约系统资源。

  2. 有效的防止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.

本文出自 “厚积薄发” 博客,请务必保留此出处http://joedlut.blog.51cto.com/6570198/1857118

以上是关于PHP入门(15)使用PDO操作MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章

PDO操作MYSQL基础教程分享

使用 PDO 选择 MYSQL 中的 PHP 变量 [重复]

在 PHP 中到处使用准备好的语句? (PDO)

PHP PDO 与普通 mysql_connect

PHP、PDO、MySQL - 多个 INSERT 容易被注入? [复制]

PHP操作PDO预处理以及事务