今天用PDO写的一个数据库操作类,支持预处理和事务
时间:2008-06-09
来源:互联网
主要是为了以后的方便加入了预处理和事务的处理,还有更自由的数据方式和类型设置
如果发现有不好的地方请指出,本人将立即更正
调用方式: index.php
<?php
//********************************************
//* Explain:用来演示数据库处理程序
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-8
//********************************************
include_once 'DataBaseAPI.class.php';
//初始化数据类
$DataBase = DataBaseAPI::Init();
//一条SQL语句
$sql = "select * from user where user_id > ? and user_id < ?";
//将SQL传送到数据类中
$DataBase->setSql($sql);
//为上面的SQL的设置第一个二个条件的值
$DataBase->setValue(array(0,4));
/**
* 返回的数据方式,共有四种形式:
* 0 -- 关联数组形式
* 1 -- 数字索引数组形式
* 2 -- 两者数组形式都有
* 3 -- 按照对象的形式
* (默认:数字索引和数组形式都有)
*/
$DataBase->setDataMode(2);
/**
* 返回的数据类型,共有三种:
* 0 -- 最新插入到数据库的ID
* 1 -- 结果集中的列的数量
* 2 -- 语句执行后影响的行数
* 3 -- 包含了所有行的数组
* 4 -- 结果集中取出一行
* 5 -- 结果集中某一列中的数据 格式:array(5,1) 表示返回第1列的数据
* 6 -- 返回结果集中某一列的结构 格式:array(6,3) 表示返回第3列的结构
* (默认:包含了所有行的数组)
*/
$DataBase->setDataType(3);
/**
* 数据执行的工作类型,共有三种:
* 1:单条预处理执行方式
* 2:多条预处理执行方式
* 3:多条事务处理方式 *
* 默认为:单条预处理执行方式
*/
$DataBase->setWorkType(1);
//执行SQL语句并返回结果
var_dump($DataBase->Perform());
?>
上面的数据方式、数据类型、数据执行的工作类型只有在你需要改变默认操作时才有需要调用
一般只需要:
$DataBase->setSql($sql);
$DataBase->setValue(array(0,4));
$DataBase->Perform());
三个步聚即可
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:主要对数据库连接和数据执行以及获取的结果格式
//* 进行设置
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-7
//********************************************
header("Content-type:text/html; charset=utf-8");
ini_set("upload_max_filesize", "32M");
ini_set("memory_limit", "128M");
ini_set("post_max_size", "64M");
ini_set("max_execution_time", "0");
ini_set('date.timezone','Asia/Shanghai');
class PdoConfig
{
//保存自己本身
protected static $_Config = false;
//数据其他参数配置
protected $_DataConfig;
//默认连接参数
private $_DefaultConnect;
public function __construct()
{
//数据库主机地址
$this->_DefaultConnect['Db_Host'] = "localhost";
//用户名称
$this->_DefaultConnect['Db_User'] = "root";
//用户对应的密码
$this->_DefaultConnect['Db_PassWord'] = "123456";
//数据库名称
$this->_DefaultConnect['Db_DataName'] = "News";
//数据库端口
$this->_DefaultConnect['Db_Port'] = 3306;
}
//初始化
public static function Init()
{
if(!self::$_Config)
{
self::$_Config = new PdoConfig;
}
//单一模式
return self::$_Config;
}
/**
* 设置连接配置,如果需要修改此默认设置
* 只需要传一相同格式的数组进来即可
* @param Array $Parameter
* @return $this->_DefaultConnect
*/
public function ConnectConfig($Parameter = false)
{
if(
!empty($Parameter['Db_Host']) &&
!empty($Parameter['Db_User']) &&
!empty($Parameter['Db_PassWord']) &&
!empty($Parameter['Db_DataName']) &&
!empty($Parameter['Db_Port'])
)
{
$this->_DefaultConnect = $Parameter;
}
//返回参数
return $this->_DefaultConnect;
}
//设置数据库配置的默认参数
public function ParameterConfig()
{
/**
* 返回的数据方式,共有四种形式:
* 0 -- 关联数组形式
* 1 -- 数字索引数组形式
* 2 -- 两者数组形式都有
* 3 -- 按照对象的形式
* (默认:2)
*/
$this->_DataConfig['DataMode'] = 2;
/**
* 字段名强制转换成大写或小写
* 0: 强制列名是小写
* 1: 列名按照原始的方式
* 2: 强制列名为大写
* (默认:1)
*/
$this->_DataConfig['FieldMode'] = 1;
/**
* 错误提示方式
* 0: 不显示错误信息,只显示错误码
* 1: 显示警告错误
* 2: 抛出异常
* (默认:2)
*/
$this->_DataConfig['ErrorShowMode'] = 2;
/**
* 指定数据库返回的NULL值在php中对应的数值
* 0: 不变
* 1: 空字符转换成 NULL.
* 2: NULL 转换成空字符
* (默认:0)
*/
$this->_DataConfig['NullMode'] = 0;
/**
* 是否开启持久连接
* 0: 关闭
* 1: 开启.
* (默认:0)
*/
$this->_DataConfig['LongMode'] = 1;
/**
* 是否开启自动提交功能
* 0: 关闭
* 1: 开启.
* (默认:1)
*/
$this->_DataConfig['AutoMode'] = 1;
//返回参数
return $this->_DataConfig;
}
}
/*
* __autoload 函数,它会在试图使用尚未被定义的类
* 时自动调用。通过调用此函数,脚本引擎在 PHP 出错
* 失败前有了最后一个机会加载所需的类
*/
function __autoload($class_name)
{
if(file_exists($class_name.".conn.php"))
{
$file = $class_name.".conn.php";
}
if(file_exists($class_name.".php"))
{
$file = $class_name.".php";
}
if(file_exists($class_name.".class.php"))
{
$file = $class_name.".class.php";
}
if(!empty($file))
{
include_once "$file";
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:数据库连接,根据配置文件中的参数进行数据库
//* 连接,连接失败即返回错误代码(代码的具体内容可以
//* 在配置文件中定制),连接成功将返回一个数据库连接对象
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-7
//********************************************
Class DataBase extends PdoConfig
{
//配置文件
private $_PdoConfig;
//数据库连接参数
private $_Connect;
//其他配置参数
private $_OtherConnect;
//数据库连接
private static $_DbManager;
//允许将更新后的PdoConfig传进来
public function __construct($Obj = false)
{
if(is_object($Obj))
{
$this->_PdoConfig = $Obj;
}else{
$this->_PdoConfig = parent::Init();
}
$this->_Connect = $this->_PdoConfig->ConnectConfig();
$this->_OtherConnect = $this->_PdoConfig->ParameterConfig();
}
public function ConnectData()
{
if(self::$_DbManager === null)//当连接不存在时才进行连接否则使用原来的连接
{
try {
self::$_DbManager = new PDO(
"mysql:host=".$this->_Connect['Db_Host'].";dbname=".$this->_Connect['Db_DataName'].";port=".$this->_Connect['Db_Port']."",
$this->_Connect['Db_User'],$this->_Connect['Db_PassWord'],$this->setLongMode($this->_OtherConnect['LongMode']));
}
catch( PDOException $e )//出错提示
{
exit( $e->__toString());
}
self::$_DbManager->exec('set names \'utf8\'');//默认编码
//设置字段显示方式
$this->setFieldMode($this->_OtherConnect['FieldMode']);
//设置错误显示方式
$this->setErrorShowMode($this->_OtherConnect['ErrorShowMode']);
//设置空格转换方式
$this->setNullMode($this->_OtherConnect['NullMode']);
//设置自动提交方式
$this->setAutoMode($this->_OtherConnect['AutoMode']);
}
return self::$_DbManager;
}
/**
* 字段名强制转换成大写或小写
* PDO::CASE_LOWER: 强制列名是小写
* PDO::CASE_NATURAL: 列名按照原始的方式
* PDO::CASE_UPPER: 强制列名为大写
* (默认:列名按照原始的方式)
*/
protected function setFieldMode($num)
{
$Parameter[0] = PDO::CASE_LOWER;
$Parameter[1] = PDO::CASE_NATURAL;
$Parameter[2] = PDO::CASE_UPPER;
self::$_DbManager->setAttribute(PDO::ATTR_CASE,$Parameter[$num]);
}
/**
* 错误提示方式
* PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码
* PDO::ERRMODE_WARNING: 显示警告错误
* PDO::ERRMODE_EXCEPTION: 抛出异常
* (默认:抛出异常)
*/
protected function setErrorShowMode($num)
{
$Parameter[0] = PDO::ERRMODE_SILENT;
$Parameter[1] = PDO::ERRMODE_WARNING;
$Parameter[2] = PDO::ERRMODE_EXCEPTION;
self::$_DbManager->setAttribute(PDO::ATTR_ERRMODE,$Parameter[$num]);
}
/**
* 指定数据库返回的NULL值在php中对应的数值
* PDO::NULL_NATURAL: 不变
* PDO::NULL_EMPTY_STRING: 空字符转换成 NULL.
* PDO::NULL_TO_STRING: NULL 转换成空字符
* (默认:不变)
*/
protected function setNullMode($num)
{
$Parameter[0] = PDO::NULL_NATURAL;
$Parameter[1] = PDO::NULL_EMPTY_STRING;
$Parameter[2] = PDO::NULL_TO_STRING;
self::$_DbManager->setAttribute(PDO::ATTR_ORACLE_NULLS,$Parameter[$num]);
}
/**
* 是否开启持久连接
* (默认:开启)
*/
protected function setLongMode($num)
{
$Parameter[0] = array(PDO::ATTR_PERSISTENT => TRUE);
$Parameter[1] = array(PDO::ATTR_PERSISTENT => FALSE);
return $Parameter[$num];
}
/**
* 是否开启自动提交功能
* (默认:开启)
*/
protected function setAutoMode($num)
{
$Parameter[0] = true;
$Parameter[1] = false;
self::$_DbManager->setAttribute(PDO::ATTR_AUTOCOMMIT,$Parameter[$num]);
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:数据库对外接口,所有数据调用与执行统一使用
//* 此类接口,支持常规语句操作(select|update|insert|delete)、
//* 预处理语句以及事务处理语句.
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-8
//********************************************
include_once 'PdoConfig.php';
class DataBaseSql
{
protected $_Sql;
protected $_SqlValue;
protected $_Db;
protected $_DataMode;
protected $_DataType;
public function __construct()
{
$this->_Db = new DataBase;
$this->_Db = $this->_Db->ConnectData();
$this->_DataMode = PDO::FETCH_BOTH;
$this->_DataType = array('fetchAll',0);
}
//设置SQL语句
public function setSql($Sql)
{
$this->_Sql= $Sql;
}
//设置SQL的值
public function setSqlValue($SqlValue)
{
$this->_SqlValue = $SqlValue;
}
protected function CheckSql()
{
if(!empty($this->_Sql) && !empty($this->_SqlValue))
{
for($i=0;$i<count($this->_SqlValue);$i++)
{
if(count($this->_SqlValue[$i]) !== substr_count($this->_Sql,"?"))
{
echo "SQL Error!<br/>";
echo "Sql: ".$this->_Sql."<br/>Value: ";
echo implode(",",$this->_SqlValue[$i]);
exit;
}
}
return true;
}else{
return false;
}
}
/**
* 返回的数据方式,共有四种形式:
* PDO::FETCH_ASSOC -- 关联数组形式
* PDO::FETCH_NUM -- 数字索引数组形式
* PDO::FETCH_BOTH -- 两者数组形式都有
* PDO::FETCH_OBJ -- 按照对象的形式
* (默认:数字索引和数组形式都有)
*/
public function setDataMode($num)
{
$Parameter[0] = PDO::FETCH_ASSOC;
$Parameter[1] = PDO::FETCH_NUM;
$Parameter[2] = PDO::FETCH_BOTH;
$Parameter[3] = PDO::FETCH_OBJ;
//检测是否属于该方式范围
if(array_key_exists($num,$Parameter))
{
$this->_DataMode = $Parameter[$num];
}
}
/**
* 返回的数据类型,共有三种:
* lastInsertId -- 最新插入到数据库的ID
* columnCount -- 结果集中的列的数量
* rowCount -- 语句执行后影响的行数
* fetchAll -- 包含了所有行的数组
* fetch -- 结果集中取出一行
* fetchColumn -- 结果集中某一列中的数据
* getColumnMeta -- 返回结果集中某一列的结构
* (默认:包含了所有行的数组)
*/
public function setDataType($DataType)
{
$Parameter[0] = 'lastInsertId';
$Parameter[1] = 'columnCount';
$Parameter[2] = 'rowCount';
$Parameter[3] = 'fetchAll';
$Parameter[4] = 'fetch';
$Parameter[5] = 'fetchColumn';
$Parameter[6] = 'getColumnMeta';
if(!is_array($DataType))
{
$DataType = array($DataType,0);
}
if($DataType[0] == 0)
{
if(strpos(strtolower($this->_Sql),'insert into') === false)
{
echo "错误: 仅只有 insert into 语句才能获取最新插入到数据库的ID! 请重新设置返回的数据类型" ;
exit;
}
}
$this->_DataType = array($Parameter[$DataType[0]],$DataType[1]);
}
}
interface DataManage
{
//执行SQL语句
public function PerformSql();
}
final Class DataBaseAPI
{
private $_Sql;
private $_SqlValue;
/**
* 返回的数据方式,共有四种形式:
* 0 -- 关联数组形式
* 1 -- 数字索引数组形式
* 2 -- 两者数组形式都有
* 3 -- 按照对象的形式
* (默认:数字索引和数组形式都有)
*/
private $_DataMode = 2;
/**
* 返回的数据类型,共有三种:
* 0 -- 最新插入到数据库的ID
* 1 -- 结果集中的列的数量
* 2 -- 语句执行后影响的行数
* 3 -- 包含了所有行的数组
* 4 -- 结果集中取出一行
* 5 -- 结果集中某一列中的数据 格式:array(5,1) 表示返回第1列的数据
* 6 -- 返回结果集中某一列的结构 格式:array(6,3) 表示返回第3列的结构
* (默认:包含了所有行的数组)
*/
private $_DataType = 3;
/**
* 数据执行的工作类型,共有三种:
* 1:单条预处理执行方式
* 2:多条预处理执行方式
* 3:多条事务处理方式 *
* 默认为:单条预处理执行方式
*/
private $_WorkType;
private $_WorkData;
//数据处理对象
private $_WordObj;
private function __construct()
{
//单条预处理执行方式
$this->_WorkData[0]= 'DataBaseGeneral';
//多条预处理执行方式
$this->_WorkData[1]= 'DataBasePretreatment';
//多条事务处理方式
$this->_WorkData[2]= 'DataBaseTransaction';
}
public function Init()
{
return new DataBaseAPI;
}
//设置工作方式
public function setWorkType($WorkType)
{
if(!array_key_exists($WorkType,$this->_WorkData))
{
$WorkType = 0;
}
$this->_WorkType= $WorkType;
}
//设置数据类型
public function setDataType($DataType)
{
$this->_DataType= $DataType;
}
//设置获取数据方式
public function setDataMode($DataMode)
{
$this->_DataMode = $DataMode;
}
//设置SQL语句
public function setSql($Sql)
{
$this->_Sql= $Sql;
}
//设置SQL的值
public function setValue($SqlValue)
{
$this->_SqlValue[]= $SqlValue;
}
public function Perform()
{
$this->_WordObj = new $this->_WorkData[$this->_WorkType];
$this->_WordObj->setSql($this->_Sql);
$this->_WordObj->setSqlValue($this->_SqlValue);
$this->_WordObj->setDataMode($this->_DataMode);
$this->_WordObj->setDataType($this->_DataType);
return $this->_WordObj->PerformSql();
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:最基础的数据处理,但不包括预处理和事务处理
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-8
//********************************************
class DataBaseGeneral extends DataBaseSql implements DataManage
{
private $_Sth;
private $_getData;
//执行SQL语句
public function PerformSql()
{
if(parent::CheckSql())
{
try{
//绑定SQL
$this->_Sth = $this->_Db->prepare($this->_Sql);
/*
* 循环将参数绑到上面的SQL语句中并执行,将返回的结果进行保存
*/
for($i=0;$i<count($this->_SqlValue[0]);$i++)
{
$this->_Sth->bindParam($i+1,$this->_SqlValue[0][$i]);
}
$this->_Sth->execute();
@$this->_Sth->setFetchMode($this->_DataMode);
if($this->_DataType[0] == 'lastInsertId')
{
$this->_getData = $this->_Db->{$this->_DataType[0]}($this->_DataType[1]);
}else{
$this->_getData = $this->_Sth->{$this->_DataType[0]}($this->_DataType[1]);
}
}catch (Exception $e) {
echo "Failed: " . $e->getMessage();
}
}
return $this->_getData;
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:预处理接口,用户传入一条SQL语句后可传入多个
//* 相同类型的条件,进行多个处理,如同时插入几条记录
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-8
//********************************************
class DataBasePretreatment extends DataBaseSql implements DataManage
{
private $_Sth;
private $_getData = array();
//执行SQL语句
public function PerformSql()
{
if(parent::CheckSql())
{
try{
//绑定SQL
$this->_Sth = $this->_Db->prepare($this->_Sql);
/*
* 循环将参数绑到上面的SQL语句中并执行,将返回的结果进行保存
*/
foreach ($this->_SqlValue as $key=>$value)
{
for($i=0;$i<count($value);$i++)
{
$a[$i] = $value[$i];
if($key == 0)
{
$this->_Sth->bindParam($i+1,$a[$i]);
}
}
$this->_Sth->execute();
@$this->_Sth->setFetchMode($this->_DataMode);
if($this->_DataType[0] == 'lastInsertId')
{
$data = $this->_Db->{$this->_DataType[0]}($this->_DataType[1]);
}else{
$data = $this->_Sth->{$this->_DataType[0]}($this->_DataType[1]);
}
/*
* 如果返回的结果是非数组的形式即使用数组保存
* 如果返回的结果是数组将所有的数组结果进行合并
*/
if(is_array($data))
{
$this->_getData = array_merge($this->_getData,$data);
}else{
$this->_getData[] = $data;
}
}
}catch (Exception $e) {
echo "Failed: " . $e->getMessage();
}
}
return $this->_getData;
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
<?php
//********************************************
//* Explain:事务处理类,只有数据库支持事务才能使用否则将
//* 有严重错误提示
//* FileFormat:UTF-8
//* Author:Arvin(Yangl2006)
//* QQ:8769852
//* By:2008-6-8
//********************************************
class DataBaseTransaction extends DataBaseSql implements DataManage
{
private $_Sth;
private $_getData;
//执行SQL语句
public function PerformSql()
{
if(parent::CheckSql())
{
try{
//事务开始
$this->_Db->beginTransaction();
//绑定SQL
$this->_Sth = $this->_Db->prepare($this->_Sql);
/*
* 循环将参数绑到上面的SQL语句中并执行,将返回的结果进行保存
*/
foreach ($this->_SqlValue as $key=>$value)
{
for($i=0;$i<count($value);$i++)
{
$a[$i] = $value[$i];
if($key == 0)
{
$this->_Sth->bindParam($i+1,$a[$i]);
}
}
$this->_Sth->execute();
@$this->_Sth->setFetchMode($this->_DataMode);
if($this->_DataType[0] == 'lastInsertId')
{
$data = $this->_Db->{$this->_DataType[0]}($this->_DataType[1]);
}else{
$data = $this->_Sth->{$this->_DataType[0]}($this->_DataType[1]);
}
/*
* 如果返回的结果是非数组的形式即使用数组保存
* 如果返回的结果是数组将所有的数组结果进行合并
*/
if(is_array($data))
{
$this->_getData = array_merge($this->_getData,$data);
}else{
$this->_getData[] = $data;
}
}
//事务处理完毕
$this->_Db->commit();
}catch (Exception $e) {
//事务强行终止
$this->_Db->rollBack();
echo "Failed: " . $e->getMessage();
}
}
return $this->_getData;
}
}
?>
[/PHP]
作者: yangl2006 发布时间: 2008-06-09
感觉还比较爽

作者: yangl2006 发布时间: 2008-06-10
一切为了共享
作者: yangl2006 发布时间: 2008-06-11

作者: 夜雨飘零 发布时间: 2008-06-11
数据库操作干嘛要整成类,本来就不复杂,
弄成类了真麻烦
作者: lxylxy888666 发布时间: 2008-06-11
你这接口非接口呢!
作者: jarry8359 发布时间: 2008-06-11
作者: 飘渺晴霜 发布时间: 2008-06-12
* @version 2.0
* @package 数据库连接和SQL操作
* @author Arvin <[email protected]>
* @copyright 2006-2009 Yangl
//调用方法:
//加载数据库类文件
include_once 'DataBaseAPI.class.php';
//初始化方式
方式一:
$db = Data_Connect_API($connect,$index);
$connect:数据库连接参数 (数组类型或false)
array(
'db_host' => "localhost" , //服务器名
'db_name' => "test" , //数据库名
'db_user' => "root" , //用户名
'db_password' => "123456" , //密码
'db_port' => "3306" , //端口(MYSQL默认)
'db_code' => "utf8" , //编码
'db_persistent' => "1" //持久连接
);
//$connect 为false时:使用现有连接
//$index:连接素引号,主要用来区别多连接,默认为0
//例子:
$db1 = Data_Connect_API($connect,0);
$db2 = Data_Connect_API($connect,5);
/**$db1和$db2 虽然参数一致,但是二个不同的连接,互不影响
重复调用时:$db3 = Data_Connect_API(false,5);
$db2和$db3 将是同一个连接同一个实例*/
//方式二:
$db = DataBaseAPI::Init(new PDOServerConnect($connect))
//$connect:数据库连接参数 (数组类型) 这里不能为false
array(
'db_host' => "localhost" ,
'db_name' => "test" ,
'db_user' => "root" ,
'db_password' => "123456" ,
'db_port' => "3306" ,
'db_code' => "utf8" ,
'db_persistent' => "1"
);
/**例子:
第一次连接:$db1 = DataBaseAPI::Init(new PDOServerConnect($connect))
以后调用:$db2 = DataBaseAPI::Init()
$db1 和 $db2 是同一个连接同一个实例
$db3 = DataBaseAPI::Init(new PDOServerConnect($connect2))
当$connect2 发生改变时将生成新的实例
这是 $db3 不等于$db1 或 $db2,$db3是个新的 DataBaseAPI 类
上面任何一种连接方式都可以,推荐使用第一种*/
/**
========================================================
标准SQL传值方式
========================================================
第一种: 自定义SQL方式(自己过虑数据)*/
//查询用户ID等于12的数据
$data = $db->StartSql("select * from user where user_id = 2"); //$data 就是查询后结果
//第二种: 自定义SQL方式(系统过虑数据)
//查询用户ID等于12的数据
$data = $db->StartSql(
array("select * from user where user_id = ?",
array(12))
); //$data 就是查询后结果
$data = $db->StartSql(
array("select * from user where user_name like ?",
array('%admin%'))
);
$data = $db->StartSql(
array("select * from user where user_id in ?",
array('(12)'))
);
/**除了SQL语句的命令或关键字外,其余的符号必须放值中
========================================================
简洁SQL传值方式
========================================================
--------------
查询方式
--------------*/
//设置表名称
$sql['table'] = 'user;
//设定查询条件
$sql['select'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
//分组
$sql['group'] = array('user_sex'); //需要分组的字段名称,支持多个array('user_sex','user_power')
//MYSQL其他参数,共有三种,具体功能可以查看手册
//$sql['parameter'] = array('SQL_CACHE','SQL_CALC_FOUND_ROWS');
//强行指定使用或关闭索引,当联合查询时使用的索引不一定是我们所需要的,可用这种式指定
//$sql['index'] = array('on'=>array('user_id'),'off'=>array('user_name'));
//这里我们指定强行使用user_id为索引
$sql['index'] = array('on'=>array('user_id'));
//在结果中需要获取数据的字段列表
//$sql['field'] = array('user_id','user_name'); 二个字段
//$sql['field'] = array('*'); 所有字段
//$sql['field'] = array('count(*) as count'); 记录统计
//这里我们只获取user_id
$sql['field'] = array('user_id');
//连表查询方式,目前支持外连接的左连和右连
$sql['join'] = array(
array('join'=>'left','table'=>'power','key'=>'user_id,user_id'),
array('join'=>'right','table'=>'role','key'=>'user_id,user_id')
);
/**join:连接方式
table:需要连接的表名
key:相连接二个表的字段名称(连接表字段,源数据表字段)*/
//获取唯一记录(有去重复效果)
$sql['dist'] = array('user_id');
//分页(开始记录数,记录条数)
$sql['limit'] = array(0,20);
//排序 支持多个字段
$sql['order'] = array('user_id'=>'desc'); //字段名=>排序方式 desc:降 asc:升
/**以上除了$sql['table']以外其他都是可选项
--------------
删除数据方式
--------------
与查询功能雷同,仅有一点区别:*/
//查询
$sql['select'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
//删除
$sql['del'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
仅是$sql['select'] 与 $sql['del'] 的区别
//--------------
//增加数据方式
//--------------
//设置表名称
$sql['table'] = 'user;
$sql['add'] = array('user_id'=>3,'user_name'=>'张三');
//不支持上面查询的功能
//--------------
//修改数据方式
//--------------
//设置表名称
$sql['table'] = 'user;
$sql['set'] = array('user_sex'=>'女','user_name'=>'李四');
$sql['where'] = array(array('user_id','=',3));
$sql['set'] 设置需要修改的字段名和对应值
$sql['where'] 设置需要修改的条件范围
//支持上面查询的部分功能: 排序和分页(条数)
/**========================================================
预处SQL传值方式
========================================================*/
//同时插入三条记录
$data = $db->StartSql(
array("insert into user (user_name) value (?)",
array(
array("张三"),
array("李四"),
array("王五")
)));
/**========================================================
事务处理SQL传值方式
========================================================*/
$sql['batch'][]="insert into user (user_name) value ("张三")";
$sql['batch'][]="insert into news (news_name,news_date) value ("这是一个实例",date("Y-m-d H:i:s))";
//其他功能说明:
$db->StartSql(SQL语句,是否分页,是否显示SQL语句);
//是否分页: true 为开启自动分页处理 false 为关闭 默认为false
//如果启用了分页,分页的HTML代码就会保存在 $db->_Page_Text 变量中,获取即可
$page = $db->_Page_Text; //$page 就是分页HTML
//是否调试SQL语句: true SQL执行后显示SQL语句 false 为关闭 默认为false
$db->_Sql_Debug = true; //开启页面SQL调试信息
$db->_Sql_Debug = false; //开启页面SQL调试信息 默认为false
/**---------------------
设置获取的数据类型
---------------------*/
$db->setDataType(类型id);
// 数据类型ID
* 返回的数据方式,共有四种形式:
* 0 -- 关联数组形式
* 1 -- 数字索引数组形式
* 2 -- 两者数组形式都有
* 3 -- 按照对象的形式
* (默认:0)
*/
/**---------------------
设置数据获取方式
---------------------*/
$db->setDataMode(方式id); 为false 时由系统自动判断
//数据方式ID
* 返回的数据类型,共有三种:
* 0 -- 最新插入到数据库的ID
* 1 -- 结果集中的列的数量
* 2 -- 语句执行后影响的行数
* 3 -- 包含了所有行的数组
* 4 -- 结果集中取出一行
* 5 -- 结果集中某一列中的数据 格式:array(5,1) 表示返回第1列的数据
* 6 -- 返回结果集中某一列的结构 格式:array(6,3) 表示返回第3列的结构
* (默认:false 由系统自动判断)
*/
/**系统自动判断规则如下:
执行SELECT查询时返回 包含了所有行的数组
执行INSERT添加操作时返回 最新插入到数据库的ID
执行DELETE 删除操作时返回 语句执行后影响的行数
执行UPDATE 更新操作时返回 语句执行后影响的行数*/
[/php]
在没有使用框架的时候或者不想使用框架带的DB类,此类还是比较方便直观
分页效果:
调试信息:当SQL语句执行时间大于0.1秒时自动提示

作者: yangl2006 发布时间: 2008-06-14
public function __construct()
{
//数据库主机地址
$this->_DefaultConnect['Db_Host'] = "localhost";
$_DefaultConnect; 的下划线“_”有什么含义?
$this->_DefaultConnect['Db_Host'] = "localhost"; 的下划线“_”前面没有“$”符号?
作者: zxe 发布时间: 2008-06-15
_开头的表示仅在是当前类使用的变量
$this->_DefaultConnect['Db_Host'] = "localhost"; 的下划线“_”前面没有“$”符号?
对象内的变量表示方式与函数内的不一样,具体可以看看CLASS方面的资料
作者: yangl2006 发布时间: 2008-06-15
作者: lifeibest 发布时间: 2008-06-16
作者: haocaowei 发布时间: 2008-06-23
但是却没有一项全面的学习教程
哎……
那些所谓的入门什么的,都是说一样,不说一样。
到头来等于没说……
作者: konakona 发布时间: 2008-07-12
不太明白为什么用PDO还要自己封装类,POD本身就封装的很完善了,自己还要写是否有点画蛇添足的意味?
不过还是要为楼主勇敢创新的精神顶一下。
作者: 欧阳 发布时间: 2008-07-31
作者: tianxj 发布时间: 2008-07-31
作者: 渔洋童话 发布时间: 2008-08-02
作者: smallipis 发布时间: 2008-08-05
作者: tianxj 发布时间: 2008-08-05
作者: 堕落的人生 发布时间: 2008-08-18
作者: 木頭 发布时间: 2008-08-23
作者: anlixp 发布时间: 2008-08-25
作者: xinzf 发布时间: 2008-09-10
作者: PhpServerPage 发布时间: 2008-09-15

作者: CFC4N 发布时间: 2008-09-16
本帖附件需要回复才可下载或查看 ,最讨厌这样的
作者: lucas1860 发布时间: 2008-09-22
* @version 2.0
* @package 数据库连接和SQL操作
* @author Arvin <[email protected]>
* @copyright 2006-2009 Yangl
调用方法:
//加载数据库类文件
include_once 'DataBaseAPI.class.php';
//初始化方式
方式一:
$db = Data_Connect_API($connect,$index);
$connect:数据库连接参数 (数组类型或false)
array(
'db_host' => "localhost" , //服务器名
'db_name' => "test" , //数据库名
'db_user' => "root" , //用户名
'db_password' => "123456" , //密码
'db_port' => "3306" , //端口(MYSQL默认)
'db_code' => "utf8" , //编码
'db_persistent' => "1" //持久连接
);
为false时:使用现有连接
$index:连接素引号,主要用来区别多连接,默认为0
例子:
$db1 = Data_Connect_API($connect,0);
$db2 = Data_Connect_API($connect,5);
$db1和$db2 虽然参数一致,但是二个不同的连接,互不影响
重复调用时:$db3 = Data_Connect_API(false,5);
$db2和$db3 将是同一个连接同一个实例
方式二:
$db = DataBaseAPI::Init(new PDOServerConnect($connect))
$connect:数据库连接参数 (数组类型) 这里不能为false
array(
'db_host' => "localhost" ,
'db_name' => "test" ,
'db_user' => "root" ,
'db_password' => "123456" ,
'db_port' => "3306" ,
'db_code' => "utf8" ,
'db_persistent' => "1"
);
例子:
第一次连接:$db1 = DataBaseAPI::Init(new PDOServerConnect($connect))
以后调用:$db2 = DataBaseAPI::Init()
$db1 和 $db2 是同一个连接同一个实例
$db3 = DataBaseAPI::Init(new PDOServerConnect($connect2))
当$connect2 发生改变时将生成新的实例
这是 $db3 不等于$db1 或 $db2,$db3是个新的 DataBaseAPI 类
上面任何一种连接方式都可以,推荐使用第一种
========================================================
标准SQL传值方式
========================================================
第一种: 自定义SQL方式(自己过虑数据)
//查询用户ID等于12的数据
$data = $db->StartSql("select * from user where user_id = 2"); //$data 就是查询后结果
第二种: 自定义SQL方式(系统过虑数据)
//查询用户ID等于12的数据
$data = $db->StartSql(
array("select * from user where user_id = ?",
array(12))
); //$data 就是查询后结果
$data = $db->StartSql(
array("select * from user where user_name like ?",
array('%admin%'))
);
$data = $db->StartSql(
array("select * from user where user_id in ?",
array('(12)'))
);
除了SQL语句的命令或关键字外,其余的符号必须放值中
========================================================
简洁SQL传值方式
========================================================
--------------
查询方式
--------------
//设置表名称
$sql['table'] = 'user;
//设定查询条件
$sql['select'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
//分组
$sql['group'] = array('user_sex'); //需要分组的字段名称,支持多个array('user_sex','user_power')
//MYSQL其他参数,共有三种,具体功能可以查看手册
//$sql['parameter'] = array('SQL_CACHE','SQL_CALC_FOUND_ROWS');
//强行指定使用或关闭索引,当联合查询时使用的索引不一定是我们所需要的,可用这种式指定
//$sql['index'] = array('on'=>array('user_id'),'off'=>array('user_name'));
//这里我们指定强行使用user_id为索引
$sql['index'] = array('on'=>array('user_id'));
//在结果中需要获取数据的字段列表
//$sql['field'] = array('user_id','user_name'); 二个字段
//$sql['field'] = array('*'); 所有字段
//$sql['field'] = array('count(*) as count'); 记录统计
//这里我们只获取user_id
$sql['field'] = array('user_id');
//连表查询方式,目前支持外连接的左连和右连
$sql['join'] = array(
array('join'=>'left','table'=>'power','key'=>'user_id,user_id'),
array('join'=>'right','table'=>'role','key'=>'user_id,user_id')
);
join:连接方式
table:需要连接的表名
key:相连接二个表的字段名称(连接表字段,源数据表字段)
//获取唯一记录(有去重复效果)
$sql['dist'] = array('user_id');
//分页(开始记录数,记录条数)
$sql['limit'] = array(0,20);
//排序 支持多个字段
$sql['order'] = array('user_id'=>'desc'); //字段名=>排序方式 desc:降 asc:升
以上除了$sql['table']以外其他都是可选项
--------------
删除数据方式
--------------
与查询功能雷同,仅有一点区别:
//查询
$sql['select'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
//删除
$sql['del'] = array(
array('user_id','>',10),
array('user_name','like','%杨'),
);
仅是$sql['select'] 与 $sql['del'] 的区别
--------------
增加数据方式
--------------
//设置表名称
$sql['table'] = 'user;
$sql['add'] = array('user_id'=>3,'user_name'=>'张三');
不支持上面查询的功能
--------------
修改数据方式
--------------
//设置表名称
$sql['table'] = 'user;
$sql['set'] = array('user_sex'=>'女','user_name'=>'李四');
$sql['where'] = array(array('user_id','=',3));
$sql['set'] 设置需要修改的字段名和对应值
$sql['where'] 设置需要修改的条件范围
支持上面查询的部分功能: 排序和分页(条数)
========================================================
预处SQL传值方式
========================================================
//同时插入三条记录
$data = $db->StartSql(
array("insert into user (user_name) value (?)",
array(
array("张三"),
array("李四"),
array("王五")
)));
========================================================
事务处理SQL传值方式
========================================================
$sql['batch'][]="insert into user (user_name) value ("张三")";
$sql['batch'][]="insert into news (news_name,news_date) value ("这是一个实例",date("Y-m-d H:i:s))";
其他功能说明:
$db->StartSql(SQL语句,是否分页,是否显示SQL语句);
是否分页: true 为开启自动分页处理 false 为关闭 默认为false
是否调试SQL语句: true SQL执行后显示SQL语句 false 为关闭 默认为false
$db->_Sql_Debug = true; //开启页面SQL调试信息
$db->_Sql_Debug = false; //开启页面SQL调试信息 默认为false
---------------------
设置获取的数据类型
---------------------
$db->setDataType(类型id);
// 数据类型ID
* 返回的数据方式,共有四种形式:
* 0 -- 关联数组形式
* 1 -- 数字索引数组形式
* 2 -- 两者数组形式都有
* 3 -- 按照对象的形式
* (默认:0)
*/
---------------------
设置数据获取方式
---------------------
$db->setDataMode(方式id); 为false 时由系统自动判断
//数据方式ID
* 返回的数据类型,共有三种:
* 0 -- 最新插入到数据库的ID
* 1 -- 结果集中的列的数量
* 2 -- 语句执行后影响的行数
* 3 -- 包含了所有行的数组
* 4 -- 结果集中取出一行
* 5 -- 结果集中某一列中的数据 格式:array(5,1) 表示返回第1列的数据
* 6 -- 返回结果集中某一列的结构 格式:array(6,3) 表示返回第3列的结构
* (默认:false 由系统自动判断)
*/
系统自动判断规则如下:
执行SELECT查询时返回 包含了所有行的数组
执行INSERT添加操作时返回 最新插入到数据库的ID
执行DELETE 删除操作时返回 语句执行后影响的行数
执行UPDATE 更新操作时返回 语句执行后影响的行数
[/php]
在没有使用框架的时候或者不想使用框架带的DB类,此类还是比较方便直观
分页效果:
调试信息:当SQL语句执行时间大于0.1秒时自动提示

作者: yangl2006 发布时间: 2008-10-10
作者: yangl2006 发布时间: 2008-10-10
include_once 'DataBaseAPI.class.php';
$db = Data_Connect_API($connect,$index);
$connect=array(
'db_host' => "localhost" , //服务器名
'db_name' => "dedev51freesp1" , //数据库名
'db_user' => "root" , //用户名
'db_password' => "root" , //密码
'db_port' => "3306" , //端口(MYSQL默认)
'db_code' => "utf8" , //编码
'db_persistent' => "1" //持久连接
);
$db = DataBaseAPI::Init(new PDOServerConnect($connect))
$data = $db->StartSql("select * from dede_archives ");
echo $data['title ']."<br>";
?>[/php]
作者: asu530 发布时间: 2008-10-12
include_once 'DataBaseAPI.class.php';
$connect=array(
'db_host' => "localhost" , //服务器名
'db_name' => "dedev51freesp1" , //数据库名
'db_user' => "root" , //用户名
'db_password' => "root" , //密码
'db_port' => "3306" , //端口(MYSQL默认)
'db_code' => "utf8" , //编码
'db_persistent' => "1" //持久连接
);
$db = Data_Connect_API($connect);
$data = $db->StartSql("select * from dede_archives ");
var_dump($data);
?>
$data是一个二维数组,不是一维的
作者: yangl2006 发布时间: 2008-10-12
另外,分页写到数据库类中,怎么都觉得别扭,分页查询,有多少东西是和数据库有关系的呢?
支持LZ,支持原创
作者: xinzf 发布时间: 2008-10-28
我一般喜欢将以前的代码完全抛弃,正所谓将杯子中的水倒掉
你现在的做法是我很久以前的一种做法
作者: hobbs136 发布时间: 2008-10-29
PDO是已经封装的很好了,不过在项目中最好还是封装一下,把一些设置也封装进来,或者缓存,或者是方便的小功能等等
作者: xinzf 发布时间: 2008-10-31
$sql_line = substr($sql_line,0,strrpos($sql_line,'limit'));
我用
$sql = "select * from city";
$data = $db->StartSql($sql, true);
出错了!
还有,怎么设置分页的相关参数?
支持一下!
作者: jiaxian 发布时间: 2008-11-26
作者: Youngson 发布时间: 2008-11-29
作者: zxe 发布时间: 2009-01-07
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28