简单的php写入数据库类代码分享


Posted in PHP onJuly 26, 2011

不知道原创要写到随笔里。
All right ,第一篇博文。
有三个类:
1 . 过滤输入(轻量级的)
class input_filter
负责将参数,如$_GET,$_POST 这些过滤
返回值类型为 数组,用作 made_sql 类的参数
2 . 转换成SQL语句
class made_sql
参数的类型为数组和表名(字符串),数组的键名为表的列名,值为插入值
返回值类型为 字符串 ,用作 mysql ->query方法 的参数
3 . 数据库查询
class mysql
用到了单列模式,用静态方法来获取对象,具体参看 instanceof操作符的作用

class input_filter 
{ 
private $input_all; // 要过滤的数组 
private $rustle; // 过滤后的结果 
//构造函数 参数可以是$_GET or $_POST 这些 
public function __construct($input_C) 
{ 
if(is_array($input_C)) 
$this->input_all = $input_C ; 
else 
echo 'Parameter is not valid'; 
//初始化,不然后面第一次合并数组PHP不知道这是什么类型 
$this->rustle = array(); 
} 
private function filter_arr() // 主函数 
{ 
foreach ($this->input_all as $key_input => $val_input) 
{ 
//如果键名不是字符串,那么返回错误信息 
// for key 
if(!is_string($key_input)) // error 
{ 
echo 'This key is not string'; 
return false; 
} 
// The # is mysql Note . 
$key_one = str_replace('#','',$key_input); 
$key = htmlspecialchars($key_one,ENT_QUOTES,'UTF-8'); 
// 我没找 # 的HTML转义符,所以用空代替 
$val_one = str_replace('#','',$val_input); 
// 这个函数只转化 < > ' " ,还有个类似函数会转义所有符号 
$val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8'); 
// merger 
$rustle_one = array($key=>$val); 
//合并数组 
$this->rustle = array_merge($this->rustle,$rustle_one); 
} 
} 
//这个函数有点多余,留下以后扩展用 
public function get_filter_rustle() 
{ 
$this->filter_arr(); 
return $this->rustle ; 
} 
}

调用方法:
$filter = new filter_input($_GET) ; // or $_POST 
$input_data = $filter->get_filter();

转换成SQL语句:
class madesql 
{ 
private $Cnow_ary; // type array 传入的参数 
private $Cname_str; 
private $insert_sql; //最终的sql语句 string type 
public function __construct($Cary,$Cname) 
{ 
//检查传入参数类型是否为数组 
if (! is_array($Cary)) 
return false; 
else 
$this->Cnow_ary = $Cary; // 写入的值 
$this->Cname_str = $Cname; // 数据库表名称 
25 } 
private function setSql() // 主函数 ,生产SQL语句 
{ 
foreach ( $this->Cnow_ary as $key_ary => $val_ary ) 
{ 
$cols_sql = $cols_sql.','.$key_ary; //列名组合 
$vals_sql = $vals_sql.', \''.$val_ary.'\'' ; //值 组合 
} 
// 因为前面foreach的算法有点问题,第一个字符是逗号 
// 所以用sunstr_replace()删除 ,自第一位起(0),只替换一个字符(1) 
$cols_sql = substr_replace($vals_sql,'',0,1); 
$vals_sql = substr_replace($vals_sql,'',0,1); 
$this->insert_sql = 
'INSERT INTO '.$this->Cname_str.' ( ' 
.$cols_sql.' ) VALUES ( '.$vals_sql.' )'; // 语句成型 
} 
//扩展用 
public function getSql() 
{ 
$this->setSql(); 
return $this->insert_sql; 
} 
}

3 . 数据库查询
数据库查询类是参照书上的单列模式(用静态方法获取对象,这样在一个脚本里只有一个数据库查询类的实例)
我想单例模式用于这个类还是有点用的
class mysql 
{ 
private $connect; 
static $objectMysql; // 存放对象 
private function __construct() 7 { 
// 创建对象的时候这个构造函数会被调用,用来初始化 
$connect = mysql_connect('db address','password','dbname'); 
$this->db = mysql_select_db('db',$connect); 
} 
public static function Mysql_object() 
{ 
//instanceof 操作符用于检查对象是否属于某个类或者接口的实例。我说的不是很规范... 
//如果$objectMysql不是mysql(self)的实例,那么就创建一个 
if(! self::$objectMysql instanceof self) 
self::$objectMysql = new mysql(); 
//这时候的$objectMysql就已经是一个对象 
return self::$objectMysql; 
} 
public function query($sql) 
{ 
return mysql_query($sql,$this->db); 
} 
}

All right ,归纳一下使用方法
$filter = new filter_input($_GET) ; // or $_POST 
$input_data = $filter->get_filter(); 
$madeSql = new madesql($input_data,'tableName'); 
$sql = $madeSql->getSql(); 
$mysql = mysql::Mysql_object() ; 
if( $mysql->query($sql) ) 
echo 'Ok'; 
else 
echo 'failure';

只需要这几行调用代码即可以完成写入数据库的操作
另外再说一下构造函数的私有公有问题,书上的mysql单例模式中构造函数是声明为了private ,而没有单例模式的类如此则会产生编译错误,即 PHP 不能创建一个对象 ,查了下。

原因在于创建对象往往在类外面进行,这样就产生了无法访问构造函数的问题。 而单列模式是在自身类中创建对象,因此访问private方法没有限制。

原先以为单例模式只是防止创建相同的对象,现在看来单例模式可以将构造函数封装起来,确实提高了安全性
  filter_input类 的结果可以直接用作 madesql类 的参数的 前提是 :
表单的name必须和数据库的列名相同,否则你就白看这么多

PHP 相关文章推荐
实现分十页分向前十页向后十页的处理
Oct 09 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php mysql数据库操作类
Jun 04 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
如何通过PHP实现Des加密算法代码实例
May 09 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 #PHP
PHP里的中文变量说明
Jul 23 #PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 #PHP
php文档更新介绍
Jul 22 #PHP
php 数据库字段复用的基本原理与示例
Jul 22 #PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 #PHP
PHP性能优化 产生高度优化代码
Jul 22 #PHP
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
幼儿园的门卫岗位职责
2014/04/10 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android