PDO

Posted abinlulu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO相关的知识,希望对你有一定的参考价值。

一、什么是PDO

   PDOphp数据对象(PHP Data Object)的缩写

二、怎么查看php是否支持PDO

  1. 使用phpinfo() 函数查看PDO是否支持
  2. 如果没有开启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);

 

  

 

六、 参数绑定(问号)

  1. 第一个参数必须是连续的
  2. 第二个参数必须是一个变量
<?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的主要内容,如果未能解决你的问题,请参考以下文章

PDO

通过 pdo 代码填充下拉菜单

在 PDO 的 JS 代码中使用 PHP 数组

我应该在 PDO 对象中返回啥来生成可靠的代码?

封装PDO连接数据库代码

这个 PDO 代码对 SQL 注入是不是足够安全? [复制]