更新和在PHPPDO数据库模式的缺失

更新和在PHPPDO数据库模式的缺失
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);
以上是本文的全部内容,希望大家能喜欢。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部