PDO

Posted KOE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO相关的知识,希望对你有一定的参考价值。

php 数据对象PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。

PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。

 

 

<?php

/**
* 我自己封装的PDO操作类
* User: fu
* Date: 2017/7/26
* Time: 14:42
*/
class MyPDO
{
protected $pdo;

function __construct()
{
if(file_exists(‘db.ini‘)){
$arr = parse_ini_file(‘db.ini‘);
}else{
exit(‘没有找到对应的配置信息文件...‘);
}

$dbh = "{$arr[‘dbms‘]}:host={$arr[‘host‘]};port={$arr[‘port‘]};dbname={$arr[‘dbname‘]};charset={$arr[‘charset‘]}";
$user = $arr[‘user‘];
$pwd = $arr[‘password‘];
$this->pdo = new PDO($dbh, $user, $pwd);
}

function __destruct()
{
$this->pdo = null;
}

/**
* 执行DML语句并返回受到影响的行数
* @param $sql 需要执行的SQL语句
* @return int 执行后返回受影响的行数(整数类型)
*/
public function execDML($sql){
return $this->pdo->exec($sql);
}

/**
* 查询并返回转换后的结果集合为数组
* @param $sql 需要执行的SQL语句
* @param int $var 指代返回数组的下标模式(PDO::FETCH_BOTH[默认],PDO::FETCH_NUM,PDO::FETCH_ASSOC)
* @return array 返回结果集数组,如果没有查询结果则返回一个空数组
*/
public function arrayByQuery($sql, $var=PDO::FETCH_BOTH){
$ps = $this->pdo->query($sql, $var);
if($ps)
return $ps->fetchAll();
return array();
}

/**
* 查询并返回转换后的结果集合为对象数组
* @param $sql 需要执行的SQL语句
* @param string $className 需要对应的类名,如果没有写则用默认值stdClass
* @return array 返回结果集对象数组,如果没有查询结果则返回一个空数组
*/
public function objectByQuery($sql, $className=‘stdClass‘){
$ps = $this->pdo->query($sql);
$arr = array();
if($ps){
while ($info=$ps->fetchObject($className))
array_push($arr, $info);
}
return $arr;
}

/**
* 使用预编译语句获取DML操作后的受影响的行数
* @param $sql 需要执行的SQL语句
* @param array $arr 执行语句需要的参数值
* @return int 执行DML后受影响的行数
*/
public function intByPrepare($sql,array $arr=array()){
$ps = $this->pdo->prepare($sql);
$ps->execute($arr);
return $ps->rowCount();
}
/**
* 使用预编译语句获取查询后的数组集合结果
* @param $sql 需要执行的SQL语句
* @param array $arr 执行语句需要的参数值
* @return array 语句执行后返回的数组
*/
public function arrayByPrepare($sql,array $arr=array()){
$ps = $this->pdo->prepare($sql);
$ps->execute($arr);
return $ps->fetchAll();
}

/**
* 使用预编译语句获取查询后的对象数组集合结果
* @param $sql 需要执行的SQL语句
* @param array $arr 执行语句需要的参数值
* @param string $className 需要对应的类名,如果没有写则用默认值stdClass
* @return array 语句执行后返回的对象数组
*/
public function objectByPrepare($sql, $arr=array(), $className=‘stdClass‘){
if(!is_array($arr)){
echo ‘第二个参数必须是数组类型<br>‘;
return array();
}
$ps = $this->pdo->prepare($sql);
$ps->execute($arr);
$infos = array();
while ($info=$ps->fetchObject($className))
array_push($infos, $info);
return $infos;
}

}

以上是关于PDO的主要内容,如果未能解决你的问题,请参考以下文章

PDO

通过 pdo 代码填充下拉菜单

在 PDO 的 JS 代码中使用 PHP 数组

我应该在 PDO 对象中返回啥来生成可靠的代码?

封装PDO连接数据库代码

这个 PDO 代码对 SQL 注入是不是足够安全? [复制]