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

不知道原创要写到随笔里。
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必须和数据库的列名相同,否则你就白看这么多

(0)

相关推荐

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

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

  • Asp.Net类型转换类(通用类)代码分享

    废话不多说了,直接给大家贴代码了,具体代码如下所述: /// <summary> /// 类型转换类 /// 处理数据库获取字段为空的情况 /// </summary> public static class DBConvert { #region------------------ToInt32类型转换------------------ /// <summary> /// 读取数据库中字符串并转换成Int32 /// 为空时返回0 /// </summary&

  • python将数据插入数据库的代码分享

    python将数据插入数据库的方法: 首先读入数据并建立数据库连接: 然后创建数据库: 接着执行插入数据语句,迭代读取每行数据: 最后关闭数据库连接即可. 比如现在我们要将如下Excel数据表格插入到MySQL数据库中,该如何实现呢? 实现代码: #导入需要使用到的数据模块 import pandas as pd import pymysql #读入数据 filepath = 'E:\_DataSet\catering_sale.xls' data = pd.read_excel(filepat

  • 一个简单至极的PHP缓存类代码

    网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个.废话不多说,直接看代码吧! 使用说明: 1.实例化 $cache = new Cache(); 2.设置缓存时间和缓存目录 $cache = new Cache(60, '/any_other_path/'); 第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置. 默认情况下,缓存时间是 3600 秒,缓存目录是 cache/ 3.读取缓存 $value = $cache->get('data_ke

  • 基于GD2图形库的PHP生成图片缩略图类代码分享

    要使用PHP生成图片缩略图,要保证你的PHP服务器安装了GD2图形库 使用一个类生成图片的缩略图 1.使用方法 $resizeimage = new resizeimage("图片源文件地址", "200", "100", "0","缩略图地址"); //就只用上面的一句话,就能生成缩略图,其中,源文件和缩略图地址可以相同,200,100分别代表宽和高 2. 缩略图类代码 //使用如下类就可以生成图片缩略图

  • ThinkPHP文件缓存类代码分享

    取自ThinkPHP的文件缓存类代码,这里就不多废话了,小伙伴们自己看注释吧. <?php /** * @desc 文件缓存 */ class Cache{ const C_FILE = '/Runtime/'; private $dir = ''; const EXT = '.tpl'; private $filename = ''; public function __construct($dir = ''){ $this->dir = $dir; } /** * @desc 设置文件缓存

  • 可替代log4j日志的c#简单日志类队列实现类代码分享

    复制代码 代码如下: using System;using System.Collections.Generic;using System.Globalization;using System.IO;using System.Linq;using System.Text;using System.Threading; namespace LogisTrac{    /// <summary>    /// 日志类     /// 队列 可年/月/周/日/大小分割    /// 调用方法:   

  • java简单实现复制 粘贴 剪切功能代码分享

    废话不多说,直接上代码,小伙伴们仔细看下注释吧. 复制代码 代码如下: /*简单的复制 剪切 粘贴 功能  操作:     复制测试: 输入文本选择文本,点击复制,然后将光标放在右边的TextArea,点击粘贴   剪切测试:输入文本选择文本,然后将光标放在右边的TextArea,点击剪切   */ import javax.swing.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; p

  • 一个PHP验证码类代码分享(已封装成类)

    复制代码 代码如下: <?php session_start(); Header("Content-type: image/gif"); class SecurityCode { private $codes = ''; function __construct() { $code = '0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z'; $codeArray = explode('-

  • 好用的AJAX类代码分享

    ajax.js -------------------------[ajax类]-------------------------- 复制代码 代码如下: function Ajax(recvType){ var aj=new Object(); aj.recvType=recvType ? recvType.toUpperCase() : 'HTML'; //向形参中传递的文件类型 aj.targetUrl=''; aj.sendString=''; aj.resultHandle=null;

随机推荐