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 ...
随机推荐
- R笔记 map_leaflet googlevis
packages : map leaflet library(leaflet) library(maps) mapStates = map("state", fill = TRUE ...
- HDOJ 1576 A/B
数论水题... A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Swift2.1 语法指南——自动引用计数
原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...
- Aspose.Cells设置自动列宽(最佳列宽)及一些方法总结
/// <summary> /// 设置表页的列宽度自适应 /// </summary> /// <param name="sheet">wor ...
- C++内存分配方式
参考:http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html http://www.cnblogs.com/skydesign ...
- Kali Linux渗透基础知识整理(三):漏洞利用
漏洞利用阶段利用已获得的信息和各种攻击手段实施渗透.网络应用程序漏洞诊断项目的加密通信漏洞诊断是必须执行的.顾名思义,利用漏洞,达到攻击的目的. Metasploit Framework rdeskt ...
- note:获取字符输入的一些函数
总是弄混,所以总结一下: getline() // 接受一个字符串,可以接收空格并输出,需包含“#include<string>” #include<iostream> ...
- JavaScript之函数
控制语句(switch) switch(name){ case '1': age = 123; break; case '2': age = 456; break; case '3': age = 7 ...
- Java读写文件通用格式
String path = "I:\\"; File file = new File(path + "user_id_pair.txt"); FileReade ...
- silk与opencore-amr音频编码对比
silk与opencore-amr编码对比 在采样率8000 单声道 16位采样精度情况下 silk的压缩率为 1/15 opencore-amr 1/17 对比图 原始的音频编码 opencore- ...