PDO
支持PHP需要打开,通过PHP5.1以上支持
数据库
连接单有三个元素的静态变量,静态实例化
方法,私有构造
函数dpdo.php
类dpdo {
私人$ DSN;
私有的
属性和表;
私人dbpwd美元;
私人$朗联;
私人为PDO;
防止直接实例化私有构造函数。
私有函数__construct($ DSN,dbpwd dbuser美元,美元,美元朗联= false){
美元-> DSN = $ DSN;
美元-> dbuser = $和表;
美元-> dbpwd = $ dbpwd;
美元->朗联= $朗联;
$ >连接();
}
用于防止克隆克隆的私有
空间功能 私有函数(__clone){ }
/ /静态实例化函数返回一个PDO对象
静态公共函数实例($ DSN,dbpwd dbuser美元,美元,美元朗联= false){
静态=数组($单例);静态函数用于实例化对象存储。
singindex美元= MD5($ DSN。$和表。dbpwd美元。元朗联);
如果(空($单{ $ singindex })){
单singindex } = {美元美元新的自我($ DSN,dbpwd dbuser美元,美元,美元朗联= false);
}
返回单件{ $ singindex } -> PDO;
}
私有函数连接(){
尝试{
如果(美元->朗联){
美元-> PDO新= PDO(美元-> DSN,美元-> dbuser,美元-> dbpwd,阵列(PDO::attr_persistent = >真));
其他{ }
美元-> PDO =新的PDO(美元-> DSN,美元-> dbuser,美元-> DBPwd);
}
美元-> PDO ->
查询(让
名字UTF-8);
} catch(PDOException,e){
(错误:死。$ E -> GetMessage()');
}
}
}
用于加工领域的映射,使用PDO的字段映射,可以有效地避免SQL注入
字段数组
处理,主要用于编写和更新数据,使用和或查询数组生成SQL语句和映射字段。
公共功能fdfields($数据$link = ',',为法官=阵列(),aliastable美元=){
$=;
地图=阵列(美元);
foreach(美元美元美元数据关键=值){
mapindex美元= ':'。($链接!= ',:)。aliastable美元。美元关键;
SQL(aliastable美元美元美元aliastable = ''。'.。美元关键。($ $ {键}。$ }或=。mapindex美元。$链接;
地图mapindex } = { $ $ $值;
}
美元(= SQL,$链接);
返回的数组($ SQL,为地图);
}
用于处理单个字段
公共函数FDField(美元,美元的价值判断,美元= =,= 'cn premap美元,美元aliastable = {)
mapindex美元= ':'。premap美元。aliastable美元。$场;
为SQL = '($ aliastable。aliastable美元。‘')。。$场。为判断。mapindex美元的`;
地图mapindex } = { $ $ $值;
返回的数组($ SQL,为地图);
}
只要使用方法就可以很容易地生成查询
条件和相应的数据数组。
公共功能fdcondition(合条件,$地图){
如果(is_string(条件)){
$ = $条件;
} else if(is_array(条件)){
如果(合条件'str{ }){
如果(is_string(合条件'str{ })){
在美元美元=条件'str'} {;
{人}
返回false;
}
}
如果(is_array(合条件{数据' })){
$link = { } 'link美元的条件条件{ 'link}:';
列表(consql美元,美元mapcondata)=美元-> fdfields(合条件的} {数据链路,美元,美元的法官条件{ });
如果($ consql){
美元-($在哪里)。链接:consql美元美元);
地图= array_merge美元($地图,mapcondata美元);
}
}
}
返回的数组($,$地图);
}
DB.php的具体实施
公共函数取($ SQL,searchdata美元=阵列($ DataMode = PDO:),fetch_assoc,$ pretype =阵列(PDO::attr_cursor:cursor_fwdonly = > PDO:)){
如果($ SQL){
SQL限制1;
美元美元PDOStatement = -> PDO ->准备($ SQL,$ pretype);
美元($ searchdata PDOStatement ->
执行);
返回的数据= $ PDOStatement ->取($数据模型);
{人}
返回false;
}
}
公共功能fetchall($ SQL,searchdata美元=阵列($极限= array),(0, 10),$ DataMode = PDO::fetch_assoc,$ pretype =阵列(PDO::attr_cursor:cursor_fwdonly = > PDO:)){
如果($ SQL){
$限制。(int)$限制{ 0 }。。(intval($极限{ 1 })> 0 intval($极限{ 1 }):10);
美元美元PDOStatement = -> PDO ->准备($ SQL,$ pretype);
美元($ searchdata PDOStatement ->执行);
返回的数据= $(美元fetchall PDOStatement ->数据模型);
{人}
返回false;
}
}
公共函数插入(美元美元美元的表名,数据,returninsertid = false,$取代= false){
如果(!空($ TableName)计数($data)> 0){
SQL replace'replace美元到美元:'insert成';
列表(setsql美元美元,地图)=美元-> fdfields($数据);
为SQL。而美元=‘
设置'setsql美元;
美元美元PDOStatement = -> PDO ->准备($ SQL,阵列(PDO::attr_cursor:cursor_fwdonly = > PDO:));
execret =美元美元PDOStatement ->执行($地图);
返回execret美元(美元returninsertid美元-> PDO -> lastinsertid()():execret美元):假;
{人}
返回false;
}
}
更新函数(是美元,美元美元美元数据条件下,地图=阵列(),returnrowcount美元= true){
如果(!空($ TableName)计数($data)> 0){
SQL =更新美元。而美元。';
列表(setsql美元,美元mapsetdata)=美元-> fdfields($数据);
SQL setsql美元美元;
地图= array_merge美元($地图,mapsetdata美元);
列表($,$地图)=美元-> fdcondition(合条件,$地图);
$ = $;
美元美元PDOStatement = -> PDO ->准备($ SQL,阵列(PDO::attr_cursor:cursor_fwdonly = > PDO:));
execret =美元美元PDOStatement ->执行($地图);
返回execret美元(美元returnrowcount PDOStatement美元->行数()():execret美元):假;
{人}
返回false;
}
}
公共函数
删除(美元美元美元的表名,条件,地图=阵列()){
如果(!空(表条件){美元美元)
SQL语句的'delete美元。而美元;
列表($,$地图)=美元-> fdcondition(合条件,$地图);
$ = $;
美元美元PDOStatement = -> PDO ->准备($ SQL,阵列(PDO::attr_cursor:cursor_fwdonly = > PDO:));
execret =美元美元PDOStatement ->执行($地图);
返回的execret;
}
}
测试
文件test.php
标题(内容
类型:
文本/ HTML;字符集= UTF-8);
定义('app_dir,dirname(__file__));
如果(function_exists('spl_autoload_register ')){
spl_autoload_register('autoclass);
{人}
功能__auto_load($ className){
AutoClass($ className);
}
}
功能AUTOCLASS($ className){
尝试{
require_once app_dir。' /班/。$名。。php;
catch(异常E){ }
(错误:死。$ E -> GetMessage()');
}
}
$ db =新DB();
插入
$数据{'a' } =兰特(1, 100);
数据{ } =美元B rand(1, 1000);
{ } = C数据元兰特(1200)和(1100)。。;
ret =美元美元->插入dB(A,$数据);
回声插入。(RET成功:失败)。
更新
upcondata美元{'a' } = 100;
upconjudge美元{'a' } =<;
upcondata美元{ B } = 30;
upconjudge美元{ B } = >;
列表(upconstr美元美元美元,mapupcondata)= DB -> fdfield(B,200,<,'gt);
条件=数组(
STR= > upconstr美元,
数据= > upcondata美元,
法官= > upconjudge美元,
链接=>
);
为更新{'a' } =兰特(1, 10);
$ { B } = 1更新;
美元C = 1更新{ };
changerows美元=美元DB ->更新('a',美元美元美元更新,条件,mapupcondata);
回声'更新行号:'。(int)changerows美元。;
删除
$德尔瓦尔=兰特(1, 10);
列表($达康,mapdelcon美元)= $数据库-> fdfield('a',$德尔瓦尔);
delret美元=美元->删除dB(A,mapdelcon达康美元,美元);
删除。$德尔瓦尔。($ delret‘成功':失败)。
查询
$data {'a' } = 10';
为判断{'a' } = >;
{ } = $数据B f'400;
法官{ } =美元B<;
列表(consql美元美元美元,mapcondata)= DB -> fdfields(美元的数据,法官,美元);
美元美元->取MDATA =分贝('select *从哪里。consql美元。`一`降序的
顺序,mapcondata美元);
var_dump($ MDATA);
以上是本文的全部内容,希望大家能喜欢。