有三个类:
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主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。