位置:首页 > 网络编程 > php&cms
点击展开栏目简介
php技术和开源cms使用

php/mysql/oracle:使用pdo连接和操作数据库

分享到: 微信 新浪微博 更多

PDOStatement对象

(1)pdo连接mysql

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=db;charset=utf8";
$username="root";
$password="123456";
//创建pdo类对象
$pdo=new PDO($dsn,$username,$passoword);
var_dummp($pdo);// 返回一个PDO对象 object(PDO)#1 (0){}

(2)PDO对象常用方法

$sql="insert into ...";
$rows=$pdo->exec($sql);// exec执行一条 SQL 语句,并返回受影响的行数
$lastid=$pdo->lastInsertId();//返回最后插入行的ID
// =============
$sql="select * from table";
$stmt=$pdo->query($sql);//返回PDOstatement对象
//================
$pdo->setAttribute(PDO:ATTR_DEFAULT_FETCH_MODE,PDO:FETCH_ASSOC);//设置属性 这里是设置返回关联数组
// 循环结果集数据 fetch()方法
while($arr=$stmt->fetch(PDO::FETCHASSOC)){
	print_r($arr);
}
//fetchAll()方法 返回一个包含结果集中所有行的数组
$data=$stmt->fetchAll(PDO::FETCH_ASSOC);// FETCH_ASSOC/FETCH_BOTH/FETCH_NUM
//rowCount()方法 返回受上一个 SQL 语句影响的行数
$count=$stmt->rowCount();

(3)错误处理

三种错误模式
静默模式(Silent):错误发生后,不会主动报错,是默认的模式;

$stmt=$pdo->query($sql);
echo $pdo->errorCode();//错误编号
var_dump($pdo->errorInfo());//错误信息
警告模式(Warning):错误发生后,通过PHP标准来报告错误;直接显示错误信息,不太安全。
$pdo->setAttribute(PDO: :ATTR ERRMODE,PDO::ERRMODE_WARNING);//setAttribute指定为Warning模式
异常模式(Exception):错误发生后,抛出异常,需要捕捉和处理;
$pdo->setAttribute(PDO::ATTR ERRMODE,PDO::ERRMODE EXCEPTION);
try{//执行查询的SOL语句,执行成功返回结果集对象(PDostatement类)
	$sql="****";
	$stmt= $pdo->query($sql);
}catch(Exception $error){
	//输出异常信息
	echo"错误编号:".$error->getCode();
	echo"<br>错误行号:".$error->getLine();
	echo "<br>错误文件:".$error->getFile();
	echo"<br>错误信息:".$error->getMessage();
}
(4)PDO预处理
$sql1="INSERT INTO student(name,salary,bonus,city)VALUES(:name,:salary,:bonus,:city)";//使用(:value)作为占位符方式
$stmt1= $pdo->prepare($sql1);
$stmt1->bindValue(':name','五四张');//绑定值 (bindValue可以绑定常量,bindParam不能绑定常量)
stmt1->bindValue(':salary',8000);
$stmt1->bindValue(':bonus',900);
$stmt1->bindValue(':city','山东省');
$stmt1->execute();
//===================================
$sql2="INSERT INTO student(name,salary,bonus,city)VALUES(?,?,?,?)";//使用(:?)作为占位符方式
$stmt2= $pdo->prepare($sql2);
$stmt2->bindValue(1,'五四张');
stmt2->bindValue(2,8000);
$stmt2->bindValue(3,900);
$stmt2->bindValue(4,'山东省');
$stmt2->execute();

一份示例代码:

//连接oracle数据库
public static function getOracle(){ 
	$dsn = 'oci:dbname=//主机ip:端口/服务名;charset=字符集';
	$user = '用户名';
        $pass = '密码';
	$pdo = new PDO($dsn,$user,$pass); 
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //设置为异常错误模式
	$pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
	return $pdo;
}
//==================================================
//连接mysql数据库
public static function getHR_DB(){ 
	$dsn = 'mysql:host=主机ip;dbname=库名';
	$user = '用户名';
	$pass = '密码';
	$pdo = new PDO($dsn,$user,$pass); 
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
	$pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
	$pdo->exec("SET NAMES GBK");//设置字符集
	return $pdo;
}

更多示例

$pdo = new PDO('sqlite:/path/db/users.db');
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); // <-- 过滤传入数据(请参考 PHP 过滤器), 对于INSERT、UPDATE等操作尤为重要。
$stmt->bindParam(':id', $id, PDO::PARAM_INT); // <-- 通过PDO自动过滤SQL
$stmt->execute();


上篇:php/mysql:使用mysqli连接mysql和操作

发表评论 ​共有​条评论
  • 匿名发表