1.可以访问其它数据库
2.具有事务功能
3.带有预处理语句功能(防止SQL注入攻击)
访问数据库
PDO::__construct ( string $dsn
[, string $username
[, string $password
[, array $driver_options
]]] )
$dsn = 'mysql:dbname=testdb;host=127.0.0.1' ;
例:
<?php //1.造PDO对象 $dsn ="mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); //2.写SQL语句 $sql = "select * from nation"; //3.执行SQL语句 $stm = $pdo->query($sql); //4.从PDOStatement对象里面读数据 $arr = $stm->fetch(PDO::FETCH_ASSOC); var_dump($arr); ?>
<?php $dsn ="mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); $sql = "insert into nation values('002','毛毛')"; $arr = $pdo->exec($sql); var_dump($arr); ?>
- PDO::beginTransaction — 启动一个事务
- PDO::commit — 提交一个事务
- PDO::__construct — 创建一个表示数据库连接的 PDO 实例
- PDO::exec — 执行一条 SQL 语句,并返回受影响的行数(一般用于增删改)
- PDO::getAttribute — 取回一个数据库连接的属性
- PDO::prepare — Prepares a statement for execution and returns a statement object
- PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object(主要用于查询语句)
- PDO::rollBack — 回滚一个事务
- PDO::setAttribute — 设置属性
PDOStatement::fetch从结果集中获取下一行
-
PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
-
PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组
-
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
-
PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象
事务功能(在事务里面的内容,要么全部执行,要么都不执行。例如转账,这边扣钱,对方就得收到钱;而不能这边扣钱了,对方没收到钱。)
<?php //beginTransaction 启动事务 //commit 提交事务 //rollback 回滚 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); //将PDO的错误类型设置为异常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); try { //开启事务 $pdo->beginTransaction(); $sql1 = "insert into nation values('082','数据')"; $sql2 = "insert into nation values('084','的库')"; $sql3 = "insert into nation values('083','帅哥')"; $pdo->exec($sql1); $pdo->exec($sql2); $pdo->exec($sql3); //提交事务 $pdo->commit(); } catch(Exception $e)//抓取操作 { //回滚操作 $pdo->rollBack(); } /*final { //最终执行,无论有没有异常出现,该代码都会执行 }*/ ?>
带有预处理功能
第一种方式(其中的?多了,看的眼花)
<?php $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); //写一个预处理语句 $sql = "insert into nation values(?,?)"; //将预处理语句扔到服务器等待执行,返回PDOStatement对象 $stm = $pdo->prepare($sql); //第二次将变量(参数)扔到服务器的SQL语句相应位置,给预处理语句绑定参数 /*$stm->bindParam(1,$code); $stm->bindParam(2,$name); $code = "n085"; $name = "天族"; */ //定义索引数组 $arr = array("n082","数据"); //执行 $stm->execute($arr); ?>
第二种方式(一般采用这种方式)
<?php $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); //预处理语句 $sql = "insert into nation values(:code,:name)"; $stm = $pdo->prepare($sql); //绑定参数 /*$stm->bindParam(":code",$code); $stm->bindParam(":name",$name); $code = "n070"; $name = "神族";*/ //造一个数组 $arr = array("code"=>"n071","name"=>"胜率"); //执行 $stm->execute($arr); ?>
例:
第一个页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<h1>添加数据</h1>
<form action="chuli.php" method="post">
<div>代号:<input type="text" name="code" /></div>
<div>名称:<input type="text" name="name" /></div>
<input type="submit" value="添加" />
</form>
</body>
</html>
第二个页面
<?php $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","root"); //预处理语句 $sql = "insert into nation values(:code,:name)"; $stm = $pdo->prepare($sql); //执行 $stm->execute($_POST);
第二个页面中的:值最好与第一个页面的提交过来的name名字一样,这样后面执行的时候就能直接取_POST了