php mysql PDO使用

 1 <?php
 2 $dbh = new PDO(‘mysql:host=localhost;dbname=access_control‘, ‘root‘, ‘‘);
 3 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 4 $dbh->exec(‘set names utf8‘);
 5 /*添加*/
 6 //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
 7 $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";  $stmt = $dbh->prepare($sql);  $stmt->execute(array(‘:login‘=>‘kevin2‘,‘:password‘=>‘‘));
 8 echo $dbh->lastinsertid();
 9 /*修改*/
10 $sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";
11 $stmt = $dbh->prepare($sql);
12 $stmt->execute(array(‘:userId‘=>‘7‘, ‘:password‘=>‘4607e782c4d86fd5364d7e4508bb10d9‘));
13 echo $stmt->rowCount();
14 /*删除*/
15 $sql = "DELETE FROM `user` WHERE `login` LIKE ‘kevin_‘"; //kevin%
16 $stmt = $dbh->prepare($sql);
17 $stmt->execute();
18 echo $stmt->rowCount();
19 /*查询*/
20 $login = ‘kevin%‘;
21 $sql = "SELECT * FROM `user` WHERE `login` LIKE :login";
22 $stmt = $dbh->prepare($sql);
23 $stmt->execute(array(‘:login‘=>$login));
24 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
25  print_r($row);
26 }
27 print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));
28 ?>

1 建立连接

1 <?php
2 $dbh=newPDO(‘mysql:host=localhost;port=3306; dbname=test‘,$user,$pass,array(
3 PDO::ATTR_PERSISTENT=>true
4 ));
5 ?>

持久性链接PDO::ATTR_PERSISTENT=>true

2. 捕捉错误

 1 <?php
 2 try{
 3 $dbh=newPDO(‘mysql:host=localhost;dbname=test‘,$user,$pass);
 4
 5 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 6
 7 $dbh->exec("SET CHARACTER SET utf8");
 8 $dbh=null; //断开连接
 9 }catch(PDOException$e){
10 print"Error!:".$e->getMessage()."<br/>";
11 die();
12 }
13 ?>

3. 事务的

 1 <?php
 2 try{
 3 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 4
 5 $dbh->beginTransaction();//开启事务
 6 $dbh->exec("insertintostaff(id,first,last)values(23,‘Joe‘,‘Bloggs‘)");
 7 $dbh->exec("insertintosalarychange(id,amount,changedate)
 8 values(23,50000,NOW())");
 9 $dbh->commit();//提交事务
10
11 }catch(Exception$e){
12 $dbh->rollBack();//错误回滚
13 echo"Failed:".$e->getMessage();
14 }
15 ?>

4. 错误处理

a. 静默模式(默认模式)

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException

 1 <?php
 2 try{
 3  $dbh = new PDO($dsn, $user, $password);
 4  $sql = ‘Select * from city where CountryCode =:country‘;
 5  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
 6  $stmt = $dbh->prepare($sql);
 7  $stmt->bindParam(‘:country‘, $country, PDO::PARAM_STR);
 8  $stmt->execute();
 9  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
10   print $row[‘Name‘] . "/t";
11  }
12 }   // if there is a problem we can handle it here
13 catch (PDOException $e)  {
14  echo ‘PDO Exception Caught.  ‘;
15  echo ‘Error with the database: <br />‘;
16  echo ‘SQL Query: ‘, $sql;
17  echo ‘Error: ‘ . $e->getMessage();
18 }
19 ?>

1. 使用 query()

<?php
$dbh->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据

$sql = ‘Select * from city where CountryCode =‘.$dbh->quote($country);
foreach ($dbh->query($sql) as $row)   {
 print $row[‘Name‘] . "/t";
 print $row[‘CountryCode‘] . "/t";
 print $row[‘Population‘] . "/n";
}
?>

2. 使用 prepare, bindParam和 execute [建议用,同时可以用添加、修改、删除]

<?php
$dbh->prepare($sql); 产生了个PDOStatement对象

PDOStatement->bindParam()

PDOStatement->execute();//可以在这里放绑定的相应变量
?>

3. 事物

<?php
 try {
  $dbh = new PDO(‘mysql:host=localhost;dbname=test‘, ‘root‘, ‘‘);
  $dbh->query(‘set names utf8;‘);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $dbh->beginTransaction();
  $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (‘mick‘, 22);");
  $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (‘lily‘, 29);");
  $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (‘susan‘, 21);");
  $dbh->commit();
 } catch (Exception $e) {
  $dbh->rollBack();
  echo "Failed: " . $e->getMessage();
 }
?> 

PDO常用方法:
PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是select操作。

PDO::exec()主要是针对没有结果集合返回的操作。如insert,update等操作。返回影响行数。
PDO::lastInsertId()返回上次插入操作最后一条ID,但要注意:如果用insert into tb(col1,col2) values(v1,v2),(v11,v22)..的方式一次插入多条记录,lastinsertid()返回的只是第一条(v1,v2)插入时的ID,而不是最后一条记录插入的记录ID。
PDOStatement::fetch()是用来获取一条记录。配合while来遍历。
PDOStatement::fetchAll()是获取所有记录集到一个中。
PDOStatement::fetchcolumn([int column_indexnum])用于直接访问列,参数column_indexnum是该列在行中的从0开始索引值,但是,这个方法一次只能取得同一行的一列,只要执行一次,就跳到下一行。因此,用于直接访问某一列时较好用,但要遍历多列就用不上。
PDOStatement::rowcount()适用于当用query("select ...")方法时,获取记录的条数。也可以用于预处理中。$stmt->rowcount();
PDOStatement::columncount()适用于当用query("select ...")方法时,获取记录的列数。

注解:
1、选fetch还是fetchall?
小记录集时,用fetchall效率高,减少从数据库检索次数,但对于大结果集,用fetchall则给系统带来很大负担。数据库要向WEB前端传输量太大反而效率低。
2、fetch()或fetchall()有几个参数:
mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])
array pdostatement::fetchAll(int fetch_style)

fetch_style参数:
■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH是默认的,可省,返回关联和索引。
■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC参数决定返回的只有关联数组。
■$row=$rs->fetchAll(PDO::FETCH_NUM); 返回索引数组
■$row=$rs->fetchAll(PDO::FETCH_OBJ); 如果fetch()则返回对象,如果是fetchall(),返回由对象组成的二维数组

时间: 2024-08-24 10:03:30

php mysql PDO使用的相关文章

MySQL pdo预处理能防止sql注入的原因

MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->execute([':id'=>4]); 2.语句一,服务器发送一条sql给mysql服务器,mysql服务器会解析这条sql. 语句二,服务器发送一条sql给mysql服务器,mysql服务器不会解析这条sql,只会把execute的参数当做纯参数赋值给语句一.哪怕参数中有sql命令也不会被执行,从而实

【PHP PDO】纯PHP(不使用框架)下 Mysql PDO 使用方法小记

1 配置信息 $config = array( 'db' => array( 'host' => '127.0.0.1', 'user' => 'root', 'pass' => '', 'db' => 'test_db', 'dns' => 'mysql:dbname=test_db;host=127.0.0.1;charset=utf8' ) ) 分别配置数据库链接,用户名,密码,库,dns信息(包括数据库名,数据库链接ip,以及字符集) 注意:如果不设置字符集,即

使用 mysql PDO 防止sql注入

技巧: 1. php升级到5.3.6+,生产环境强烈建议升级到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞. 2. 若使用php 5.3.6+, 请在在PDO的DSN中指定charset属性3. 如果使用了PHP 5.3.6及以前版本,设置PDO::ATTR_EMULATE_PREPARES参数为false(即由MySQL进行变量处理),php 5.3.6以上版本已经处理了这个问题,无论是使用本地模拟prepare还是调用mysql server的prep

php mysql PDO基本操作

<?php $dbh = new PDO('mysql:host=localhost;dbname=localhost', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->exec('set names utf8'); /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:pa

mysql pdo 的curl

直接上代码: 代码有注释 <?php /** * 查询数据 */ //1.连接数据库 try{ $pdo=new PDO("mysql:host=localhost;dbname=asan","root","root"); }catch (PDOException $e){ die("fail to connect mysql".$e->getMessage()); } //print_r($pdo);die; /

mysql pdo设置显示报错

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 原文地址:https://www.cnblogs.com/tommy-huang/p/9319874.html

PHP中MySQL、MySQLi和PDO的用法和区别【原创】

对于一个初学PHP的自己,对数据库的连接有着很大的疑惑,从Java转到PHP.数据库连接变了,以前只知道JDBC连接数据库,或者直接用框架调用,对于的PHP的数据库连接方式,及其应用.不是很了解,于是查阅了很多资料及自己实际操作,写下自己的一点总结笔记. PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然可以与MySQL4.1.3或更新的数 : 据

PHP中MySQL、MySQLi和PDO的用法和区别

PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然可以与MySQL4.1.3或更新的数 : 据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性. PHP的mysqli扩展 mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性: mysqli扩展在PHP 5及以后版本中包含: m

PHP中用PDO方法打开连接关闭mysql数据库

代码如下: 1 <meta http-equiv="content-type" content="text/html" charset="utf-8"/> 2 <h1>用PDO方法连接数据库!-姚远的博客</h1> 3 <form method="POST" action="<?php echo iconv("GB2312","UTF-8&