<?
php
class mysql_pdo
{
private $_host;
private $_user;
private $_pwd;
private $_dbname;
private $_pdo;
private $_fields;
private $_values;
private $_array;
private $curr_page = 1
;
private $count_page;
private $each_page = 10
;
private $field_page = '*'
;
private static $connection =
null;
private function __construct ()
{
// 防止实例化
}
/*
@@ 入口方法
parameter null
*/
public static function _interance ()
{
// 由于本地$pwd为空所有不判断$pwd;
if (
is_null(self::
$connection)) self::
$connection =
new mysql_pdo();
return self::
$connection;
}
/*
@@ 设置连接属性
parameter $host 127.0.0.1, $user root, $pwd null, $dbname eatble.
*/
public function _setdata (
$host,
$user,
$pwd,
$dbname)
{
$this->_host =
$host;
$this->_user =
$user;
$this->_pwd =
$pwd;
$this->_dbname =
$dbname;
$this->
_connect();
}
/*
@@ connection db
parameter null.
*/
public function _connect ()
{
try {
$_pdo =
new PDO('mysql:host='.
$this->_host .';dbname=' .
$this->_dbname,
$this->_user,
$this->
_pwd);
$_pdo->
exec("SET NAMES utf8"
);
} catch (PDOException
$e) {
die("Connection fail:" .
$e->
getMessage());
}
// 把$_pdo这个句柄放在静态属性,方便以下方法调用
self::
$connection =
$_pdo;
}
/*
@@ update data
@@param $table 表格
@@param $fields 字段名 关联数组
@@param $where 条件
return 受影响的行数
*/
public function _update (
$table,
$fields,
$where =
null)
{
$fields_key =
implode(
array_keys(
$fields));
$fields_value =
implode(
array_values(
$fields));
$sql = "update {
$table} set {
$fields_key} = '{
$fields_value}' " . (
$where==
null?
null: "where " .
$where);
return self::
$connection->
exec(
$sql);
}
/*
@@ insert data
@@param $table 表格
@@param $array 关联数组
*/
public function _insert (
$table,
array $array)
{
$this->_array =
$array;
$this->
foreachstr();
$sql = "insert into {
$table} (
$this->_fields) values ('{
$this->_values}')"
;
return self::
$connection->
exec(
$sql);
}
/*
@@ select data
@param $table 表格
@param $field string field,field2,field3,
@param $where array 一维关联数组 default null;
@result_type PDO::FETCH_BOTH 关联加索引 PDO::FETCH_NUM 索引 default PDO::FETCH_ASSOC 关联
*/
public function _select (
$table,
$fields = '*',
$where =
null,
$result_type = PDO::
FETCH_ASSOC)
{
if (
$fields == '*' and
$where ==
null) {
$sql = "select {
$fields} from {
$table} " . (
$where==
null?
null:"where ".
$where);
$stmt = self::
$connection->prepare(
$sql);
$stmt->
execute();
while (
$row =
$stmt->fetch(
$result_type)) {
$rows[] =
$row;
}
return $rows;
}
if (
$where !=
null) {
if (!
is_array(
$where))
return false;
// 赋值给定义的属性交给以下foreacharray处理,返回的是一个字符串
$this->_array =
$where;
$where =
$this->
foreacharray();
if (
$where) {
$sql = "select {
$fields} from {
$table} ". (
$where==
null?
null:"where ".
$where);
$stmt = self::
$connection->prepare(
$sql);
$stmt->
execute();
while (
$row =
$stmt->fetch(
$result_type)) {
$rows[] =
$row;
}
}
return $rows;
}
}
/*
@查询表格中数据的条数
@param $table 表格
@param $where 关联数组
@return 查询到的数量 number
*/
public function _selectnum (
$table,
$where =
null)
{
$sql = ''
;
if (
is_null(
$where)) {
$sql .= "select count(*) from {
$table}"
;
} else {
$this->_array =
$where;
$where =
$this->
foreacharray();
$sql .= "select count(*) from {
$table} " .(
$where==
null?
null:"where ".
$where);
}
$stmt = self::
$connection->prepare(
$sql);
$stmt->
execute();
$row_count =
$stmt->
fetch();
return $row_count[0
];
}
/*
@@ delte data
@$table 表格
@$where array default null
@return 受影响的行数
*/
public function _delete (
$table,
$where =
null)
{
if (
is_null(
$where))
return false;
// 防止误删表
if (!
is_array(
$where))
return array();
$this->_array =
$where;
$where =
$this->
foreacharray();
$sql = "delete from {
$table} " . (
$where==
null?
null:"where " .
$where);
return self::
$connection->
exec(
$sql);
}
/*
@@ 分割数组为字符串
@@param $array 一维关联数组
@$this->_fields field1, field2, field3.
@$this->_values 'values1', 'values2', 'values3';
*/
protected function foreachstr ()
{
if (!
is_array(
$this->_array))
return false;
$fields = ''
;
$values = ''
;
foreach (
$this->_array
as $key =>
$val) {
$fields .=
$key.','
;
$values .=
$val.','
;
}
$this->_fields =
rtrim(
$fields, ','
);
$this->_values =
str_replace(',', '\',\'',
rtrim(
$values, ','
));
}
/*
@@ 将关联数组转换为带有and的字符串
@@param $array 关联数组
*/
protected function foreacharray ()
{
if (!
is_array(
$this->_array))
return false;
$str = ''
;
foreach (
$this->_array
as $key =>
$val) {
if (
$key ==
$val)
return false;
// 防止sql注入
$str .=
$key .' = '. "'
$val'".' and '
;
}
return substr(
$str, 0,
strrpos(
$str, 'and'
));
}
/*
@@ 每页显示的数据
@param $table 表格
@param $field 要查询的字段 string field1, fiedl2, field3, default *
@param $curr_page 当前页码
@param $each_page 自定义每页数据 default 10
@param $where 条件
@return $page array 关联数组
*/
public function _showpage (
$table,
$field_page =
null,
$curr_page =
null,
$each_page =
null,
$where =
null)
{
if (
is_null(
$field_page))
$field_page =
$this->
field_page;
$this->count_page =
$this->_selectnum(
$table);
// 直接调用 _selectnum 拿到总条数
if (
is_null(
$each_page))
$each_page =
$this->each_page;
// 如果$each_page 为空则使用默认的$each_page default 10
// 防止输入错误的当前页导致当前页参数无效
if (
is_null(
$curr_page) ||
$curr_page >
ceil(
$this->count_page/
$each_page) ||
$curr_page <= 0)
$curr_page =
$this->
curr_page;
if (!
is_null(
$where)) {
$this->_array =
$where;
$where =
$this->
foreacharray();
}
$curr_page = (
$curr_page-1)*
$each_page;
$count_page =
ceil(
$this->count_page/
$each_page);
$sql = "select {
$field_page} from {
$table} " .(
$where==
null?
null:"where ".
$where). " limit {
$curr_page}, {
$each_page}";
// sql注入会让这里多一个where
$stmt = self::
$connection->prepare(
$sql);
$stmt->
execute();
$pages =
[];
while (
$page =
$stmt->fetch(PDO::
FETCH_ASSOC)) {
$pages[] =
$page;
}
$this->count_page =
$count_page;
if (
$pages ==
null)
return false;
return $pages;
}
/*
@下一页
@param $table 表格
@param $field_page 要查询的字段
@param $curr_page 条件不符合时调用的是第一页的数据
@return array 二维关联数组
*/
public function _nextpage (
$table,
$field_page,
$curr_page =
null)
{
$curr_page<
$this->count_page?
$this->curr_page+=1:
$this->curr_page=1
;
$result =
$this->_showpage(
$table,
$field_page,
$curr_page);
return $result;
}
/*
@上一页
@param $table 表格
@param $field_page 要查询的字段
@param $curr_page 默认为空时调用的是第一页的数据
@return array 二维关联数组
*/
public function _prevpage (
$table,
$field_page,
$curr_page =
null)
{
$result =
$this->_showpage(
$table,
$field_page,
$curr_page);
$curr_page>=0?
$this->curr_page-=1:
$this->curr_page=
$this->
count_page;
return $result;
}
/*
@总页数
@ param $table 表格
@ return 总页数
*/
public function _showcount (
$table)
{
$this->_showpage(
$table);
return $this->
count_page;
}
}
转载于:https://www.cnblogs.com/phpcurd/p/8794665.html
相关资源:各显卡算力对照表!