PDO(数据访问抽象层)
自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败。
开启了事务,可以进行回滚操作,让程序变得更安全。
1.访问不同的数据库
2.自带事务功能
3.防止SQL注入:分两次发送
/*1.造对象
$dsn = "mysql:dbname=mydb;host=localhost"; //数据源名叫做 dsn
$pdo = new PDO($dsn,"root","123"); 2.写SQL语句
$sql = "update nation set name='兽族' where code='n013'"; 3.执行SQL语句
$r = $pdo->query($sql);
$r = $pdo->exec($sql);*/ //exec执行一条sql语句,并返回受影响的行数(增删改) //事务功能
//造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123"); //设置异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //写SQL语句
$sql1 = "insert into nation values('n016','人族')";
$sql2 = "insert into nation values('n017','不死族')"; //执行两条SQL语句
try //代表试着执行两句sql语句,如果出现异常,用catch抓住,不交给程序处理
{
//启动事务
$pdo->beginTransaction(); $pdo->exec($sql1);
$pdo->exec($sql2); //提交事务
$pdo->commit();
}
catch(PDOException $e) //catch抓住异常,异常当做参数传过来放到e里面,PDOException是参数类型,里面有个getmessage方法,获取错误信息
{
//$e->getMessage();
//回滚
$pdo->rollBack();
}
final //最终的意思。 在其他语言中出现,一般用来做数据连接的关闭
{ }
防止sql注入攻击(因为它是分两次传送,所以要进行占位)
问号占位:
造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123"); 写SQL语句,预处理语句
$sql = "insert into nation values(?,?)"; 准备SQL语句,返回statement对象
$st = $pdo->prepare($sql); 绑定参数
/*$st->bindParam(1,$code);
$st->bindParam(2,$name); $code="n022"; //绑定完之后可以赋值
$name="矮人族";*/ $attr = array("n023","魔族"); //简写方法 //提交执行,不用给SQL语句了,已经传过去了
var_dump($st->execute($attr)); //预处理语句里面用?占位的,给数组的时候要给索引数组
name占位:
<?php //造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123"); //写SQL语句,预处理语句,使用name占位
$sql = "insert into nation values(:code,:name)"; //准备执行
$st = $pdo->prepare($sql); //绑定参数
/*$st->bindParam(":code",$code,PDO::PARAM_STR); //$code参数 PDO::PARAM_STR指定参数必须是一个字符串
$st->bindParam(":name",$name,PDO::PARAM_STR); $code="n024";
$name="狼族";*/ $attr = array("code"=>"n025","name"=>"虫族"); //执行
$st->execute($attr);
PDO查询:
<?php //造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123"); //写SQL语句,预处理语句
$sql = "select * from nation"; //准备执行
$st = $pdo->prepare($sql); //执行
$st->execute(); //读数据
var_dump($st->fetchAll(PDO::FETCH_ASSOC)); //调用fetch方法是每次读一行。返回关联跟索引数组。里面的参数是选择返回关联或索引数组 ?>
示例:
简单的登录页面:
<form action="chuli.php" method="post">
<input type="text" name="code" />
<input type="text" name="name" />
<input type="submit" value="提交" />
</form>
使用PDO name占位方法
<?php
//造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123"); //写SQL语句,预处理语句,使用name占位
$sql = "insert into nation values(:code,:name)"; //准备执行
$st = $pdo->prepare($sql); //执行
$st->execute($_POST); //post关联数组 里面有code、name值
PDO(数据访问抽象层)的更多相关文章
- PDO数据访问抽象层
PDO数据访问抽象层: 我们使用的mysqli是针对mysql这个数据库扩展的一个类,如果要用到别的数据库的话就可以用PDO来做 1.操作数据库 先来代码 <!--PDO--> <! ...
- PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05
之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本 ...
- PHP中关于PDO数据访问抽象层的功能操作
PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库 所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PD ...
- PDO数据访问抽象层(上)
PDO比MySQLi功能强大 PDO可以访问MySQL及其它数据库 一.造对象 <?php $dsn = "mysql:dbname = crud;host = localhost&q ...
- PDO 数据访问抽象层
1.操作其它数据库 (1)造对象 $dsn = "mysql:dbname=test3;host=localhost"; //数据源:两个参数:数据库驱动,链接数据库 $pdo = ...
- php 之 PDO数据访问抽象层(0513)
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...
- 5月13 PDO数据访问抽象层
方法1:较简单的 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- PDO数据访问抽象层(下)
PDO两大功能 一.事务功能 PDO的事务功能主要控制好几条sql语句同时成功或者同时失败(当其中一条SQL语句有错误时,同时好几条一起失败),失败时可以回滚操作 1.造对象 <?php $ds ...
- php PDO:数据访问抽象层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PDO:数据访问抽象层
<?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...
随机推荐
- IE打开报错,提示该内存不能为read的解决办法!
由于最近我遇到过一次浏览器打不开的情况,出错的错误提示为 浏览器错误:“0x5ddfddac”指令引用的“0x00000020”内存,该内存不能为read经过杀毒及IE修复均不能解决!(没试过360急 ...
- UVA1376.Animal Run (最小割转为最短路 && dijkstra)
Animal Run Time Limit:6000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status ...
- LR常用函数整理
1,变量转参数lr_save_string("aaa","param"):将字符串"aaa"或者一个字符串变量,转变成LR的参数{param ...
- eclipse emacs
eclipse emacs 插件 http://www.mulgasoft.com/emacsplus eclipse字体设置: 一.把字体设置为Courier New 操作步骤:打开Elcipse ...
- leetcode 解题报告 Word Break
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...
- All Kind Of Conference(随时更新...)
收集一些前端开发的各种会议,里面有视频或者PPT,随时查看都还是很有收获的.还有要向这些演讲的前辈看齐- AC 2015:http://ac.alloyteam.com/2015/ AC 2016:h ...
- [转载]JavaEE学习篇之——JQuery技术详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...
- 剑指Offer 从上往下打印二叉树(dfs)
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 用一个队列来辅助,先压入根节点,设置一个指针记录队列头位置,判断队头指针有没有孩子,有压入左右孩子,,,操作完一次,队头出 ...
- 剑指Offer 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原 ...
- django foreign key 自动加_id问题
解决:http://stackoverflow.com/questions/8223519/preventing-django-from-appending-id-to-a-foreign-key-f ...