PHP的预编译的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

  

以上是关于PHP的预编译的使用的主要内容,如果未能解决你的问题,请参考以下文章

87)PHP,PDO的预编译技术

JavaScript的预编译和执行

Android常见的预编译(prebuilt)

C/C++中的预编译指令

Rails:Heroku 的预编译?

JS中的预编译(词法分析)阶段和执行阶段