// 实例化PDO对象
<?php
/*
PDO 接口封装
*/
class db
{
public $pdo;
public $err = "ok"; //建立异常属性
public function __construct() // 构造函数->实例化PDO对象
{
try {
$conn = 'mysql:host=localhost; port=3306; dbname=lx; ';
$usr = 'root';
$pwd = 'root';
$this->pdo = new PDO($conn, $usr, $pwd); // 创建PDO 对象
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //设置属性 抛出异常
$this->pdo->query('set names utf8'); // 设置编码
} catch (PDOException $errobj) {
$this->err = $errobj->getMessage() . 'IN' . $errobj->getFile() . 'AT' . $errobj->getLine();
}
}
// 取得结果集对象
/*
\* 取得结果集对象
\* @param sql string sql语句
\* @param row array 数据(数组)
\* @return object 结果集对象
*/
function get_stmt($sql, array $row = [])
{
try {
if ($this->pdo == null) return false;
// 预执行语句
$item = $this->pdo->prepare($sql);
// 参数绑定
foreach ($row as $key => $val) {
// $item->bindvalue(":$key", $val); //绑定数组的 标记为KEY,值为vaL;
$item->bindvalue($key + 1, $val);
}
// 执行
$item->execute();
return $item;
} catch (PDOException $errObj) {
$this->err = $errObj->getMessage() . ' IN ' . $errObj->getFile() . ' AT ' . $errObj->getLine();
return false;
}
}
// 查询操作
/*
\* 执行查询操作的结果
\* @param sql string sql语句
\* @param row array 数据(数组)
\* @param dType int 数据类型:2->二维;1->一维; 0->单值
\* @param rType string 结果类型:array->数组; object->对象 字串 或 数值 | false
*/
public function get_open($sql, array $row = [], $dType = 1, $rType = 'array')
{
$item = $this->get_stmt($sql, $row);
$item->execute();
switch ($dType) {
case 0:
return $item->rowcount();
case 1:
return $item->fetch($rType == 'array' ? PDO::FETCH_ASSOC : PDO::FETCH_OBJ);
case 2:
return $item->fetchall($rType == 'array' ? PDO::FETCH_ASSOC : PDO::FETCH_OBJ);
}
return $item;
}
// 增、删、改操作
/**
\* 执行增删改操作,返回受影响的行数
\* @param sql string sql语句
\* @param row array 数据(数组)
\* return int 或 false
*/
function get_count($sql, array $row = []) // 返回受影响行数
{
$item = $this->get_stmt($sql, $row);
return $item->rowcount();
}
// 取回错误信息
public function get_err()
{
return $this->err;
}
}