PHP的预编译的使用

在PHP中,使用预编译不仅可以简化代码,还可以防止有些数据的泄露

<?php

/**
 * 我直接针对PDO的封装类
 * User: seven
 * Date: 2017/7/26
 * Time: 9:43
 */
class MyPDO
{
    /** 访问数据库的PDO对象 */
    protected $pdo;

    /**
     * 当前类的构造函数
     * 读取数据库配置信息文件,并初始化PDO对象
     */
    function __construct()
    {
        if(file_exists(‘db.ini‘)){
            $arr = parse_ini_file(‘db.ini‘);
        }else{
            exit(‘没有找到对应的数据库配置文件信息 ...‘);
        }
        $dsn = "{$arr[‘dbms‘]}:dbname={$arr[‘dbname‘]};host={$arr[‘host‘]};port={$arr[‘port‘]};charset={$arr[‘charset‘]}";
        $user = $arr[‘user‘];
        $password = $arr[‘password‘];
        $this->pdo = new PDO($dsn,$user,$password);
    }

    /**
     * 销毁自己的操作类时,同时销毁被创建了的PDO对象
     */
    function __destruct()
    {
        $this->pdo = null;
    }

    /**
     * 执行DML操作语句
     * @param $sql     需要执行的SQL语句
     * @return int     返回执行语句后受到影响的行数
     */
    public function pdoExec($sql){
        return $this->pdo->exec($sql);
    }

    /**
     * 返回结果为数组结构
     * @param $sql        需要执行的SQL语句
     * @param int $var    执行query函数的参数(可选值:PDO::FETCH_BOTH(默认),PDO::FETCH_NUM,PDO::FETCH_ASSOC)
     * @return array      将结果转换为数组并返回,如果没有查询结果则返回一个空数组
     */
    public function arrayByPdoQuery($sql, $var=PDO::FETCH_BOTH){
        $ps = $this->pdo->query($sql, $var);
        if($ps)
            return $ps->fetchAll();
        return array();
    }

    /**
     * 获取查询结果并封装为一个对象数组
     * @param $sql                  需要执行的SQL语句
     * @param string $class_name    创建类的名称
     * @param array $ctor_args      此数组的元素被传递给对应类的构造函数
     * @return array                返回组装好的对象数组
     */
    public function objectByPdoQuery($sql, $class_name=‘stdClass‘, $ctor_args=array()){
        $ps = $this->pdo->query($sql);
        $arr = array();
        if($ps){
            while ($obj = $ps->fetchObject($class_name, $ctor_args)){
                array_push($arr, $obj);
            }
        }
        return $arr;
    }

    /**
     * 使用PDO预编译语句执行DML操作并返回受影响的行数
     * @param $sql           需要执行的SQL语句(预编译语句写法)
     * @param array $arr     预编译语句需要添加的数据值,数组结构
     * @return int           返回DML执行后受影响的行数
     */
    public function intByPdoPrepare($sql, array $arr=array()){
        $ps =$this->pdo->prepare($sql);
        $ps->execute($arr);
        return $ps->rowCount();
    }

    /**
     * 使用PDO预编译语句执行查询操作并返回结果集合
     * @param $sql           需要执行的SQL语句(预编译语句写法)
     * @param array $arr     预编译语句需要添加的数据值,数组结构
     * @return array         转换为数组结构的返回值结果
     */
    public function arrayByPdoPrepare($sql, array $arr=array()){
        $ps =$this->pdo->prepare($sql);
        $ps->execute($arr);
        if($ps)
            return $ps->fetchAll();
        return array();
    }

    /**
     * 获取查询结果并封装为一个对象数组
     * @param $sql                  需要执行的SQL语句
     * @param array $arr            预编译语句需要添加的数据值,数组结构
     * @param string $class_name    创建类的名称
     * @param array $ctor_args      此数组的元素被传递给对应类的构造函数
     * @return array                返回组装好的对象数组
     */
    public function objectByPdoPrepare($sql, array $arr=array(), $class_name=‘stdClass‘, $ctor_args=array()){
        $ps =$this->pdo->prepare($sql);
        $ps->execute($arr);
        $arr = array();
        if($ps){
            while ($obj = $ps->fetchObject($class_name, $ctor_args)){
                array_push($arr, $obj);
            }
        }
        return $arr;
    }

}
//include_once ‘Student.class.php‘;
//$mp = new MyPDO();
//$arr = $mp->arrayByPdoQuery(‘select * from students‘, PDO::FETCH_NUM);
//var_dump($arr);
//$arr = $mp->objectByPdoQuery(‘select * from student‘, ‘Student‘);
//var_dump($arr[0]);

//$mp->arrayByPdoPrepare(‘select * from student‘, ‘test‘);

<?php
/**
 * Created by PhpStorm.
 * User: seven
 * Date: 2017/7/27
 * Time: 13:18
 */

include_once ‘MyPDO.class.php‘;
//include_once ‘Student.class.php‘;

$mp = new MyPDO();
$sex = ‘男‘;
//$sql = "select * from student where ssex=‘$sex‘";
//$arr = $mp->objectByPdoQuery($sql, ‘Student‘);
//var_dump($arr);

$sql = "insert into student values (null,?,?,?,?,?,?)";
$params = array(
    ‘王和河‘,‘男‘,‘1992-05-23‘,‘四川省成都市‘,‘13087654321‘,‘66668888‘
);
$num = $mp->intByPdoPrepare($sql, $params);
echo $num.‘<br>‘;

$sql = "select * from student where ssex=?";
$arr = $mp->objectByPdoPrepare($sql,array($sex),‘Student‘);
var_dump($arr);

  

时间: 2024-08-25 05:20:11

PHP的预编译的使用的相关文章

一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

你要的移动web前端都在这里! 大前端方向:移动Web前端.Native客户端.Node.js. 大前端框架:React.Vue.js.Koa 跨终端技术:HTML 5.CSS 3.JavaScript 跨平台框架:React Native.Cordova 前端工程化:Grunt.Gulp.Webpack 前端预编译:Babel.Sass.Less 自动化测试:Jasmine.Mocha.Karma 一图在手,应有尽有! 更多信息参考:https://item.jd.com/12170351.h

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

JDBC编程之预编译SQL与防注入式攻击以及PreparedStatement的使用教程

在JDBC编程中,常用Statement.PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程. 1.Statement       该对象用于执行静态的 SQL 语句,并且返回执行结果. 此处的SQL语句必须是完整的,有明确的数据指示.查的是哪条记录?改的是哪条记录?都要指示清楚.     通过调用

JavaScript的预编译和执行

JavaScript引擎,不是逐条解释执行javascript代码,而是按照代码块一段段解释执行.所谓代码块就是使用<script>标签分隔的代码段. 整个代码块共有两个阶段,预编译阶段和执行阶段 一.编译阶段 对于常见编译型语言(例如:Java)来说,编译步骤分为:词法分析->语法分析->语义检查->代码优化和字节生成. 对于解释型语言(例如JavaScript)来说,通过词法分析和语法分析得到语法树后,就可以开始解释执行了. (1)词法分析是将字符流(char strea

SQL Server 预编译执行SQLs

问题描述: MVC5项目,利用执行sql的方式获取数据,但是在利用预编译执行的时候报错了,字段XXXwhich was not supplied. 其实就是这个参数传了个null导致的.在传参数之前做个判断,如果为null就赋值为空串即可. if (string.IsNullOrEmpty(name)) { name = string.Empty; } String sql = "select a.Id,a.UserName,a.TrueName,ISNULL(b.OTM, '0') as Fl

浅谈VC++中预编译的头文件放那里的问题分析

用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx.h中的头文件才会有效果.如下: file: stdafx.h // stdafx.h : include file for standard system include files, // or project specific include files that are used freque

创建Pch预编译文件

在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 虽然用了很久的Xcode6但是项目是xcode5之前创建好的,所以一开始并没有发现缺少了这个pch

问题处理:找不到Pch预编译文件?

提醒:Xcode6之后就不再自动创建Pch预编译文件 在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 猜测原因: 虽然用了很久的Xcode6但是项

C++预编译头文件

以前只是学过C++中的预编译头文件,但一直没用过:既然今天又遇到了这个问题,所以还是决定写点总结 算是做个笔记吧! 在C++中之所以出现预编译的概念主要是因为在C++项目中导致整个程序的编译过程变得很缓慢的一个很重 要的原因就是C++头文件的存在,在每一个.cpp文件中都会包含许多.h的头文件,如果所包含的头文件过多或过大 就会导致.cpp文件过大而编译缓慢,但是事实上在许多.cpp中所包含的头文件都是重复出现的,即有很多头文件被 重复编译了许多次,这当然会导致项目整体的编译速度变慢. 为了解决

【java web】java执行预编译Groovy脚本

在JVM中运行Groovy类有两种方式: 使用Groovy编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类. 通过groovy类加载器在运行时直接加载*.groovy文件并生成对象.在这种方式下,没有生成任何*.class,但是生成了一个java.lang.Class对象的实例. 下面介绍前一种使用Groovy的方法:编译成java字节码并且作为正常java应用程序运行在java虚拟机上,即预编译模式. 1.