PHP中对MYSQL预编译查询语句的一个封装

PHP中对MYSQL预编译查询语句的一个封装
PHP中对MYSQL预编译查询语句的一个封装

mysql预处理

最近在做的一个项目,因为使用原生写mysql的缘故,为了防止mysql注入,找到了另一种写法,就是mysql的预处理函数,但是由于这种写法比较繁琐,所以特意对预处理语句进行封装,可以达到基本的增删查改语句以及多条件的兼容,下面贴出代码,代码如下:

/** * 获取列表数据 * @param $selfCon * @param $query * @param $params * @return array */function _getDataList($selfCon, $query, $params){    //初始化返回结果接收容器    $parameters = array();    //初始化返回结果【返回数据】    $results = array();    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //获取结果    $meta = $stmt->result_metadata();    //循环塞进容器    while ($field = $meta->fetch_field()) {        $parameters[] = &$row[$field->name];    }    //塞进数据容器    call_user_func_array(array($stmt, 'bind_result'), _refValues($parameters));  //绑定结果    //有多行记录时将多行记录存入$results数组中.    while ($stmt->fetch()) {        $x = array();        foreach ($row as $key => $val) {            $x[$key] = $val;        }        $results[] = $x;    }    //关闭查询    $stmt->close();    //返回数据    return $results;}
/** * 获取单条数据 * @param $selfCon * @param $query * @param $params * @return array */function _getData($selfCon, $query, $params){    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //获取数据    $result = $stmt->get_result()->fetch_array();    //关闭连接    $stmt->close();    //返回    return $result;}
/** * 获取数据条数 * @param $selfCon * @param $query * @param $params * @return mixed */function _getDataRow($selfCon, $query, $params){    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //清除数据    $stmt->store_result();    //获取数据条数    $row = $stmt->num_rows;    //关闭连接    $stmt->close();    //返回    return $row;}
/** * 添加数据 * @param $selfCon * @param $query * @param $params * @return mixed */function _insertData($selfCon, $query, $params){    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //获取本次插入ID    $insertId = $stmt->insert_id;    //关闭连接    $stmt->close();    //返回    return $insertId;}
/** * 更新数据 * @param $selfCon * @param $query * @param $params * @return mixed */function _updateData($selfCon, $query, $params){    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //获取本次操作的行数    $updateRow = $stmt->affected_rows;    $stmt->close();    //返回    return $updateRow;}
/** * 删除数据 * @param $selfCon * @param $query * @param $params * @return mixed */function _deleteData($selfCon, $query, $params){    //开始查询    $stmt = $selfCon->prepare($query);    //回调函数传入参数    call_user_func_array(array($stmt, 'bind_param'), _refValues($params));   //绑定参数    //执行查询    $stmt->execute();    //获取本次操作的行数    $deleteRow = $stmt->affected_rows;    $stmt->close();    //返回    return $deleteRow;}

//////////////////////////    内部方法    //////////////////////////

/** * 转化引入参数 * @param $arr * @return array */function _refValues($arr){    if (strnatcmp(phpversion(), '5.3') >= 0) { //Refer        //ence is required for PHP 5.3+        $refs = array();        foreach ($arr as $key => $value) {            $refs[$key] = &$arr[$key];        }        return $refs;    }    return $arr;}
PHP中对MYSQL预编译查询语句的一个封装
PHP中对MYSQL预编译查询语句的一个封装

0

1

以上就是封装预处理的整个方法,包括获取多条数据、单天数据、添加、编辑、删除数据,使用也非常方便,实例如下:

$selfCon = mysqli_connect("地址", "账户名", "密码", "数据库名");$sql = "INSERT INTO test (uid, content,date,time) VALUES (?,?,?,?)";$type = 'ssss';$data = array($type, '123', '测试', date('Y-m-d'), date('Y-m-d H:i:s'));$getData = _insertData($selfCon, $sql, $data);echo $getData;

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » PHP中对MYSQL预编译查询语句的一个封装

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏