博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:简单的php写入数据库类
阅读量:4548 次
发布时间:2019-06-08

本文共 5104 字,大约阅读时间需要 17 分钟。

不知道原创要写到随笔里,只做自己面象对象编程参考用。

All right ,第一篇博文。

有三个类:

    1 . 过滤输入(轻量级的)  class input_filter

    2 . 转换成SQL语句  

    3 . 数据库查询

1   class input_filter  2   {
3 4 private $input_all; // 要过滤的数组 5 private $rustle; // 过滤后的结果 6 7 //构造函数 参数可以是$_GET or $_POST 这些 8 public function __construct($input_C) 9 {
10 if(is_array($input_C)) 11 $this->input_all = $input_C ; 12 else 13 echo 'Parameter is not valid'; 14 15 //初始化,不然后面第一次合并数组PHP不知道这是什么类型 16 $this->rustle = array(); 17 } 18 19 private function filter_arr() // 主函数 20 {
21 22 foreach ($this->input_all as $key_input => $val_input) 23 {
24 //如果键名不是字符串,那么返回错误信息 25 // for key 26 if(!is_string($key_input)) // error 27 {
28 echo 'This key is not string'; 29 return false; 30 } 31 // The # is mysql Note . 32 $key_one = str_replace('#','',$key_input); 33 $key = htmlspecialchars($key_one,ENT_QUOTES,'UTF-8'); 34 35 36 // 我没找 # 的HTML转义符,所以用空代替 37 $val_one = str_replace('#','',$val_input); 38 // 这个函数只转化 < > ' " ,还有个类似函数会转义所有符号 39 $val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8'); 40 41 // merger 42 $rustle_one = array($key=>$val); 43 //合并数组 44 $this->rustle = array_merge($this->rustle,$rustle_one); 45 } 46 47 } 48 49 //这个函数有点多余,留下以后扩展用 50 public function get_filter_rustle() 51 {
52 $this->filter_arr(); 53 return $this->rustle ; 54 } 55 56 }

 调用方法:             

$filter = new filter_input($_GET) ; // or $_POST   $input_data = $filter->get_filter();

  

  转换成SQL语句:  

1   class write_db  2   {
3 private $Cnow_ary; // type array 4 private $Cname_str; 5 6 private $insert_sql; //最终的sql语句 string type 7 8 private $cols_db; // 列名 数组中是key 9 private $vals_db; // 插入值 value 10 11 12 public function __construct($Cary,$Cname) 13 {
14 //检查传入参数类型是否为数组 15 if (! is_array($Cary)) 16 return false; 17 else 18 $this->Cnow_ary = $Cary; // 写入的值 19 20 $this->Cname_str = $Cname; // 数据库表名称 21 22 $cols_db = ''; //初始化为字符串 23 $vals_db = ''; 24 25 } 26 27 private function setSql() // 主函数 ,生产SQL语句 28 {
29 30 foreach ( $this->Cnow_ary as $key_ary => $val_ary ) 31 {
32 $this->cols_db = $this->cols_db.','.$key_ary; //列名组合 33 $this->vals_db = $this->vals_db.', \''.$val_ary.'\'' ; //值 组合 34 } 35 // 因为前面foreach的算法有点问题,第一个字符是逗号 36 // 所以用sunstr_replace()删除 ,自第一位起(0),只替换一个字符(1) 37 $this->cols_db = substr_replace($this->cols_db,'',0,1); 38 $this->vals_db = substr_replace($this->vals_db,'',0,1); 39 40 $this->insert_sql = 41 'INSERT INTO '.$this->Cname_str.' ( ' 42 .$this->cols_db.' ) VALUES ( '.$this->vals_db.' )'; // 语句成型 43 } 44 //扩展用 45 public function getSql() 46 {
47 $this->setSql(); 48 return $this->insert_sql; 49 } 50 51 }

 

    3 . 数据库查询

 数据库查询类是参照书上的单列模式(用静态方法获取对象,这样在一个脚本里只有一个数据库查询类的实例)

我想单例模式用于这个类还是有点用的

1   class mysql  2    {
3 private $connect; 4 static $objectMysql; // 存放对象 5 6 function __construct() 7 { 8 // 创建对象的时候这个构造函数会被调用,用来初始化 9 $connect = mysql_connect('db address','password','dbname'); 10 $this->db = mysql_select_db('db',$connect); 11 } 12 13 public static function Mysql_object() 14 { 15 //instanceof 操作符用于检查对象是否属于某个类或者接口的实例。我说的不是很规范... 16 //如果$objectMysql不是mysql(self)的实例,那么就创建一个 17 if(! self::$objectMysql instanceof self) 18 self::$objectMysql = new mysql(); 19 20 //这时候的$objectMysql就已经是一个对象 21 return self::$objectMysql; 22 } 23 public function query($sql) 24 {
25 return mysql_query($sql,$this->db); 26 } 27 28 }

  

All right ,归纳一下

        

1   $filter = new filter_input($_GET) ; // or $_POST  2   $input_data = $filter->get_filter();  3    4   $madeSql = new madesql($input_data,'tableName');  5   $sql = $madeSql->getSql();  6  7   $mysql = mysql::Mysql_object() ;  8   if( $mysql->query($sql) )  9       echo 'Ok'; 10   else 11       echo 'failure';

    测试这些的时候似乎构造函数只能声明为public ,否则会出现致命错误 ,但书本上我记得写的private我很疑惑

  filter_input类 的结果可以直接用作 madesql类 的参数的 前提是 :

        表单的name必须和数据库的列名相同,否则你就白看这么多

转载于:https://www.cnblogs.com/PHP001/archive/2011/07/24/2115656.html

你可能感兴趣的文章
read 与 fread 的区别的误解(转载)
查看>>
嗡嘛呢叭咪吽
查看>>
使用jq深入研究轮播图特性
查看>>
反向代理
查看>>
35. Romantic Love and Ideal Romantic Relationship 爱情及理想爱情关系
查看>>
图书信息库完整解决方案(六)豆瓣接口
查看>>
Oauth2.0安全问题浅谈
查看>>
MeteoInfoLab脚本示例:CloudSAT Swath HDF数据
查看>>
个人博客作业Week1
查看>>
AsyncTask 学习笔记
查看>>
Light Oj 1005
查看>>
12、反射
查看>>
Redis中SAVE和BGSAVE的区别
查看>>
归德口有神龟石
查看>>
东风寒·杜甫
查看>>
韵语编年(之九:1983——1985)
查看>>
js声明变量作用域会提前
查看>>
委托详谈
查看>>
五容器
查看>>
【PMP】合同类型
查看>>