PDO
Posted abinlulu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO相关的知识,希望对你有一定的参考价值。
一、什么是PDO
PDO是php数据对象(PHP Data Object)的缩写
二、怎么查看php是否支持PDO
- 使用phpinfo() 函数查看PDO是否支持
- 如果没有开启PDO 请查看 wamp目录:(C:wampinphpphp7.0.4ext)下面是否有php_pdo_*.dll 如果可没有需要下载这类文件
三、学习PDO类
1.DSN The Data Source Name 用来区分你要连接声明数据库的标识作用
2. 实例化对象 如果实例化失败 会抛出一个异常 我们可以使用try{}catch(){}结构接受异常 输出异常详细信息
3.设置字符集
如果你在dsn的地方设置字符集了 就可以省略这个步骤
$sql="set names utf8";
$pdo->exec($sql);
<?php //quote //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); $name ="jack‘s yingwenming"; //将sql语句里面可能破坏sql语句的内容转义掉 $name = $pdo->quote($name); //echo $name;exit; //$name = "‘ or 1=1 or ‘"; $sql="INSERT INTO info(name,sex,age,city) VALUES({$name},0,18,‘东莞‘)"; // echo $sql;exit; //$sql="delete from info where id =‘{$name}‘"; //$sql="SELECT * FROM info WHERE name=‘{$name}‘"; //echo $sql;exit; echo $pdo->exec($sql);
4.设置错误信息
PDO::ATTR_ERRMODE: Error reporting.
PDO::ERRMODE_SILENT: Just set error codes. 沉默模式
PDO::ERRMODE_WARNING: Raise E_WARNING. warning错误
PDO::ERRMODE_EXCEPTION: Throw exceptions. 异常错误
5.基本操作开始
6.发送sql语句
四、 基本操作
1. exec() 执行增删改操作的发送语句
2.query() 执行的是查询的发送语句
五、 事务操作
a) beginTransaction() 开启事务方法
b) commit() 确认事务完成方法
c) rollBack() 回滚操作
<?php //事务操作 //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); //常规操作 //InnoDB //MyISAM //1.开启事务 $pdo->beginTransaction(); //2. 一系列操作 $sql = "UPDATE info SET money =money-5000 WHERE id=10"; $row = $pdo->exec($sql); $sql = "UPDATE info SET money =money+5000 WHERE id=1000"; $row += $pdo->exec($sql); //判断结果 if($row == 2){ //确定完成 $pdo->commit(); }else{ //回滚操作 $pdo->rollBack(); } // var_dump($row);
六、 参数绑定(问号)
- 第一个参数必须是连续的
- 第二个参数必须是一个变量
<?php //预处理和问号占位符 //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); //准备一个模版sql语句 $sql="INSERT INTO info(name,sex,age,city) VALUES(?,?,?,?)"; //发送模版语句 //得到预处理对象 $stmt=$pdo->prepare($sql); //var_dump($stmt); $name = ‘变态想‘; $sex = 0; $age = 250; $city =‘臭水沟‘; //绑定参数 //bindParam //1.参数1是数字 而且要从1开始连续的数字 //2.参数必须是一个变量 $stmt->bindParam(1,$name); $stmt->bindParam(2,$sex); $stmt->bindParam(3,$age); $stmt->bindParam(4,$city); //执行 返回一定是bool $bool = $stmt->execute(); var_dump($bool);
批量绑定参数
注意: 需要是从下标为0开始连续的索引数组
<?php //批量绑定参数问号占位符 //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); //准备一个模版sql语句 $sql="INSERT INTO info(name,sex,age,city) VALUES(?,?,?,?)"; //发送模版语句 //得到预处理对象 $stmt=$pdo->prepare($sql); //var_dump($stmt); $name = ‘想变态‘; $sex = 0; $age = 250; $city =‘臭水沟‘; //问号占位符 批量绑定参数 //必须从下标为0开始连续的索引数组 $data = array( ‘猥琐想‘, $sex, $age, $city ); //var_dump($data); //执行 返回一定是bool $bool = $stmt->execute($data); var_dump($bool);
七、 绑定参数(冒号占位)
<?php //冒号占位符绑定参数 //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); //准备一个模版sql语句 $sql="INSERT INTO info(name,sex,age,city) VALUES(:name,:sex,:age,:city)"; $stmt = $pdo->prepare($sql); $name = ‘加倍‘; $sex =1; $age = 20; $city=‘斗地主‘; //绑定参数 冒号形式 $stmt->bindParam(‘name‘,$name); $stmt->bindParam(‘sex‘,$sex); $stmt->bindParam(‘age‘,$age); $stmt->bindParam(‘city‘,$city); //执行 $bool = $stmt->execute(); var_dump($bool);
------分界线-----(以下:冒号批量绑定参数)---
<?php //冒号批量绑定参数 //1.准备dsn $mysql = ‘mysql:dbname=ss21;host=localhost;charset=utf8‘; //2.实例化对象 try{ $pdo = new PDO($mysql,‘root‘,‘123456‘); }catch(PDOException $e){ echo $e->getMessage(); } //3.设置字符集 //4.开启错误模式 $pdo->setAttribute(3,1); //准备一个模版sql语句 $sql="INSERT INTO info(name,sex,age,city) VALUES(:name,:sex,:age,:city)"; $stmt = $pdo->prepare($sql); // $name = ‘抢地主‘; // $sex =1; // $age = 20; // $city=‘斗地主‘; // $data = array( // ‘name‘=>‘超级加倍‘, // ‘sex‘=>‘1‘, // ‘age‘=>‘20‘, // ‘city‘=>‘斗地主‘, // ); // 这个数组为什么这么像$_POST //var_dump($data);exit; // var_dump($_POST); //执行 $bool = $stmt->execute($_POST); var_dump($bool); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="demo.php" method="post"> name : <input type="text" name="name"><br/> age : <input type="text" name="age"><br/> sex : <input type="text" name="sex"><br/> city : <input type="text" name="city"><br/> <input type="submit" value="提交"> </form> </body> </html>
以上是关于PDO的主要内容,如果未能解决你的问题,请参考以下文章