PDO(PHP data object):
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。
PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
驱动名称 支持的数据库类型
PDO_CUBRID | Cubrid |
PDO_DBLIB | FreeTDS / Microsoft SQL Server / Sybase |
PDO_FIREBIRD | Firebird/Interbase 6 |
PDO_IBM | IBM DB2 |
PDO_INFORMIX | IBM Informix Dynamic Server |
PDO_MYSQL | MySQL 3.x/4.x/5.x |
PDO_OCI | Oracle Call Interface |
PDO_ODBC | ODBC v3 (IBM DB2, unixODBC and win32 ODBC) |
PDO_PGSQL | PostgreSQL |
PDO_SQLITE | SQLite 3 及 SQLite 2 |
PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
PDO_4D | 4D |
用法:
1.造对象
$dsn = $dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");
2.写SQL语句
$sql = "select * from info";
或者$sql = "insert into info values ("xxx","xxx")";
3.执行语句:
$a = $pdo->query($sql);
PDO事务功能:
能够控制语句同时成功同时失败,失败时可以回滚。
方法:
//1.造对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //2.设置异常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //3.捕获异常 try{ //要执行的代码 //开启事务功能 $pdo->beginTransaction(); $sql = "insert into nation values('n018','人族')"; $sql1 = "insert into nation values('n019','回族')"; $pdo->query($sql); $pdo->query($sql1); //提交事务执行 $pdo->commit(); }catch(Exception $e){ //echo $e->getMessage(); //回滚 $pdo->rollBack(); }
防SQL注入攻击:
$dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //第一种:用“?”占位符 $sql = "insert into nation values(?,?)"; //第二种:关联索引 //$sql = "insert into nation values(:code,:name)"; //$stm = $pdo->prepare($sql); //$arr = array("code"=>"xxx","name"=>"xxx"); //将SQL语句放到服务器等待执行 $stm = $pdo->prepare($sql); //将参数传递到服务器开始执行 $arr = array("xxx","xxx"); $stm->execute($arr);