第二部分PDO详解--个人学习笔记
2016-09-27 22:03
330 查看
第二部分PDO详解
尽量使用外部的Apche服务,比如Xampp的集成环境,具体如何在PHPStorm如何更改,请参见
http://blog.csdn.net/yellowstar5/article/details/52652962
尽量使用外部的Apche服务,比如Xampp的集成环境,具体如何在PHPStorm如何更改,请参见
http://blog.csdn.net/yellowstar5/article/details/52652962
1.PDO 使得数据库更换方便 pdo开启方式 php.ini文件中搜索php_pdo 前面的分号去掉表示开启 extension=php_pdo.dll(父扩展,就是驱动确保开启,前面的分号去掉表示开启) echo php_info();查看那些已经开启 如果扩展不全,自己可以将其放在Php目录下的ext目录下如Php_pdo **高版本的php里面已经没有php_pdo.dll了,所有的连接都直接集成到php_pdo_xxx.dll中了** 所以你只要php_pdo_xxx.dll前面的;被去掉即可 2.PHP manual 静态方法或者静态成员在外部采用类名::+方法名/变量名访问 内部采用self::方法名/变量名 /单例类(目的是为了产生唯一的对象 class A{ private static $single; private function __construct(){ } static function makeA(){ if(A::$single==null){ A::$single=new self(); } return A::$single; } } print_r(A::makeA()); PDO 成员对象方法 1.query($sql) 用于执行查询sql语句,返回pdostatement对象 2.exec($sql) 用于执行增删改操作,返回影响的行数 3.setAttribute()设置PDO对象属性$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0); 4.fetchAll()用于解析数据 更常用的方式 1.连接数据库,及读取和增删改 try{ $pdo=new PDO("uri:mysqlPDO.ini", 'root',''); } catch (Exception $e){ die($e->getMessage()); } //这是快捷的操作 //$sql="select * from users"; // ////3.解析数据 foreach 语法 //foreach ($pdo->query($sql) as $val){ // echo $val['id']." ".$val['name'].$val['age']."<br>"; //} //$sql="insert into users values(null,'YellowStar',20)"; //$sql="delete from users where id=26 "; $sql="update users set name='mylove' where id=27"; $affectRow=$pdo->exec($sql); if($affectRow==1) echo 'success'; //4.释放资源 $pdo=null; 连接数据库的方式及传统的读取 1.连接数据库 try{ $ df79 pdo=new PDO("mysql:host=localhost;dbname=myapp", // 'root',''); $pdo=new PDO("uri:mysqlPDO.ini",'root','');//mysqlPDO.ini为同一目录下的配置文件 // $pdo=new PDO("mysqlpdo",'root','');//在php.ini中声明的,但好像不行 [PDO] pdo.dsn.mysqlpdo=mysql:host=localhost;dbname=myapp } catch (Exception $e){ die($e->getMessage()); } //执行query返回一个预处理对象 $sql="select * from users"; $stas=$pdo->query($sql); //$list=$stas->fetchAll(); $list=$stas->fetchAll(PDO::FETCH_ASSOC);//返回的都是关联的,没有以数字为键的 //print_r($list); //3.解析数据 foreach 语法 foreach ($list as $val){ echo $val['id']." ".$val['name'].$val['age']."<br>"; } //4.释放资源 $stas=null; $pdo=null; 2.PDO Exception的使用 PDO 异常处理介绍 PDO::ATTR_ERRMODE 1.PDO::ERRMODE_SILENT //默认是不现实的 默认是不提示的,需要用 echo $pdo->errorCode()."<br>"; print_r($pdo->errorInfo()); 2.PDO::ERRMODE_WARINING //已警告的方式报错 3.PDO::ERRMODE_EXCEPTION //以异常的方式报错,最常用 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); setAttribute(); getAttrubute(); */ try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp",'root',''); // $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); //方式二,设置PDO为报警的模式 //最常用方式三,设置PDO为异常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch (Exception $e){ die('连接数据库失败'.$e->getMessage()); } // print_r($pdo); try{ $sql="insert into userrs values(null,'Codercuixin',22)"; $result=$pdo->exec($sql); if($result==0){ // echo 'insert failure<br>'; // echo $pdo->errorCode()."<br>"; // print_r($pdo->errorInfo()); } else{ echo 'insert success'; } }catch (PDOException $e){ print_r( $e->errorInfo); } 3.PDO预处理 1.prepare()用于执行sql语句,返回PDOstatement对象 2.bindvalue()将值绑定到对应的一个参数,返回布尔值 3.bindParam()将参数绑定到相应的查询占位符上,返回布尔值 4.bindColumn()用来匹配列名和一个指定的变量名 5.执行一个准备好了的预处理语句,返回布尔值 6.rowCount()返回使用增删改查操作语句后受到影响的行总数。 1.?方式的预处理语句,一共有三种绑定方式 $statement->execute(array(null,'python',3));最简洁 /预处理的sql语句 $sql="insert into users(id,name,age) values(?,?,?)"; $statement=$pdo->prepare($sql); //第三种绑定方式 $statement->execute(array(null,'python',3)); //执行 //$statement->execute(); echo $statement->rowCount(); //对?号进行参数绑定,第一种绑定方式 //$statement->bindValue(1,null); //$statement->bindValue(2,'php'); //$statement->bindValue(3,10); //第二种绑定方式 //$id=null; //$name='java'; //$age=16; //$statement->bindParam(1,$id); //$statement->bindParam(2,$name); //$statement->bindParam(3,$age); //$id=null; //$name='java'; //$age=16; 2.别名方式的预处理语句,也有三种绑定方式(只当做知识点,并没有?的好用) //预处理的sql语句 $sql="insert into users(id,name,age) values(:id,:name,:age)"; $statement=$pdo->prepare($sql); //对?号进行参数绑定,第一种绑定方式 //$statement->bindValue("id",null); //$statement->bindValue("name",'c'); //$statement->bindValue("age",10); //第二种绑定方式 //$id=null; //$name='c++'; //$age=16; //$statement->bindParam("id",$id); //$statement->bindParam("name",$name); //$statement->bindParam("age",$age); //第三种绑定方式 $statement->execute(array('id'=>null, 'name'=>'javascript','age'=>10)); //执行 //$statement->execute(); echo $statement->rowCount(); 3.采用预处理方式Sql执行查询 $sql='select * from users'; $statement=$pdo->prepare($sql); $statement->execute(); //采用foreach输出 //foreach ($statement as $row){ // echo $row['id'].' '.$row['name'].' '.$row['age']."<br>"; //} //采用bindColumn输出 $statement->bindColumn(1,$id); $statement->bindColumn(2,$name); $statement->bindColumn('age',$age); while($row=$statement->fetch(PDO::FETCH_COLUMN)){ echo "$id $name $age<br>"; 4.PDO事务处理(要么都成功,要么都失败) 1.数据表需要InnoDB类型 2.beginTransaction() 开启一个事物作为一个回滚点 3.commit()提交事物 4.rollback 事物回滚操作 //采用预处理+事物处理执行sql操作 1.方法一 exception $pdo=null; try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp",'root',''); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ die('连接数据库失败' . $e->getMessage()); } try{ //开启事物 $pdo->beginTransaction(); $sql="insert into users values(?,?,?)"; $stmt=$pdo->prepare($sql); //传入参数 $stmt->execute(array(null,'hello',1)); $stmt->execute(array(null,'hello',1)); $stmt->execute(array(null,'hello',1)); $pdo->commit(); } catch (PDOException $e){ die('执行失败' . $e->getMessage()); $pdo->roolback(); } 2.方法二 foreach遇到错误就跳出 $pdo=null; try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp",'root',''); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ die('连接数据库失败' . $e->getMessage()); } //开启事物 $pdo->beginTransaction(); $sql="insert into users values(?,?,?)"; $stmt=$pdo->prepare($sql); $datalist=array(array(null,'hello',1), array(null,'hello',1),array(null,'hello',1)); $needCommit=true; //传入参数 foreach($datalist as $item){ $stmt->execute($item); if($stmt->errorCode()>0){ $pdo->rollBack(); $needCommit=false; echo 'operation failure'; break; } } if($needCommit) $pdo->commit(); 5.PDO增删改 如果是字符串类型必须加''(如'{$name}'),如果是整形的则不加where id={$id} action="action.php?action=add" <input type="hidden" name="id" value="<?php echo $stu['id'];?>"> <td><input type="text" name="name" value="<?php echo $stu['name']?>"></td> $sql="insert into student values(null,'{$name}','{$sex}','{$age}','{$classId}')"; $sql="delete from student where id={$id}"; $sql="update student set name='{$name}',sex='{$sex}',age='{$age}',classId='{$classId}' where id={$id}";
相关文章推荐
- objective-c学习笔记第四章《objective-c 类(第二部分)与java中的区别》
- VoIP学习笔记第二部分:语音编码
- Linux 学习笔记 -- 第二部分 Linux 文件、目录与磁盘格式 -- 第7章 Linux 文件与目录管理
- python学习笔记-Day04-第二部分(lambda表达式)
- Linux 学习笔记 -- 第二部分 Linux 文件、目录与磁盘格式 -- 第8章 Linux 磁盘与文件系统管理
- Python学习笔记-Day03 -第二部分(双向队列-deque和单向队列Queue)
- IOS学习笔记之四:Foundation Kit详解(第二部分)
- Java学习第四天笔记-第二部分
- Linux Unix shell 编程指南学习笔记(第二部分)
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- WP学习笔记(5)MVVM入门 第二部分DependencyProperty
- JAVA新手学习笔记——JAVA实战经典(李兴华)第二部分B
- 个人学习笔记(部分转载)
- 分布式、并行计算语言Erlang 学习笔记(第二部分)
- JAVA新手学习笔记——JAVA实战经典(李兴华)第二部分A
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- Linux 学习笔记 -- 第二部分 Linux 文件、目录与磁盘格式 -- 第9章 文件与文件系统的压缩与打包
- python学习笔记-Day02 -第二部分
- Spring in Action 第二部分学习笔记