资讯专栏INFORMATION COLUMN

封装mysqli_Prepare的query函数

xioqua / 2377人阅读

摘要:这里的是获得的准备的参数,把和放在第一第二个用这个解决多参数的无问题出错的处理这里我返回了,可以用其他显示结果记录数

使用mysqli_prepare的好处就是,防止注入
原理大致上就是,在执行mysqli_prepare的时候,产生了一个协议(函数),bind_parms和execute相当于把值作为参数送入这个函数,所以无论如何都无法改变代码的结构,就不会有注入产生。

看了看网上关于这个资料还挺少的,不少人竟然用if语句来判断参数封装。简直了。
AND 有时候我们要改数据结构,如果绑定结果集会有不小的麻烦,我这里把结果转为了普通mysqli结果集

请注意:mysqli_stmt_get_result 要求mysqli使用mysqlnd的驱动
不喜欢在PHP上用OOP,所以给出的是Procedural style的代码。

function query($sql, $type, $data) {
    $stmt=mysqli_prepare($link,$sql); //这里的link是mysqli_connect();获得的
    array_unshift($data, $stmt, $type);//准备bind_param的参数,把stmt和type放在第一第二个
    call_user_func_array("mysqli_stmt_bind_param",$data);//用这个解决多参数的无问题

    if(!mysqli_stmt_execute($stmt))
    {
        halt("MySQL Query Error:", $sql);  //出错的处理
    }
    $result=mysqli_stmt_get_result($stmt);//这里我返回了mysqli_result,可以用其他
    mysqli_stmt_close($stmt);
    return $result;
}  
function fetch($result) {
    return mysqli_fetch_array($result, MYSQLI_NUM);
}  
function num_rows($result) {
    return mysqli_num_rows($result);
}  

$myID=1;
$myresult=query("SELECT * FROM my_table WHERE `id`=?","i",array(&$myID));
echo num_rows($myresult);//显示结果记录数
while($row=fetch($myresult))
{
    print_r($row);
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26085.html

相关文章

  • 封装mysqli_Preparequery函数

    摘要:这里的是获得的准备的参数,把和放在第一第二个用这个解决多参数的无问题出错的处理这里我返回了,可以用其他显示结果记录数 使用mysqli_prepare的好处就是,防止注入原理大致上就是,在执行mysqli_prepare的时候,产生了一个协议(函数),bind_parms和execute相当于把值作为参数送入这个函数,所以无论如何都无法改变代码的结构,就不会有注入产生。 看了看网上关于...

    wpw 评论0 收藏0
  • Python Decorator来龙

    摘要:中的函数也是对象,可以作为高阶函数的参数传入或返回值返回。因此,当代理装饰的对象是函数时,可以使用高阶函数来对某个函数进行封装。 引言 本文主要梳理了Python decorator的实现思路,解释了为什么Python decorator是现在这个样子。 关于代理模式、装饰模式 设计模式中经常提到的代理模式、装饰模式,这两种叫法实际上是说的同一件事,只是侧重点有所不同而已。 这两者都是...

    frank_fun 评论0 收藏0
  • Python Decorator设计模式演绎过程解析

      小编写这篇文章的一个主要目的,主要是给大家去做一个相关的解答,解答的内容主要是涉及到python一些相关事宜,主要是给大家详解的是Python Decorator的一些相关事宜,比如讲一下他们的底层原理,关于设计模式演绎过程,下面就给大家详细解答下。  关于代理模式、装饰模式  设计模式中经常提到的代理模式、装饰模式,这两种叫法实际上是说的同一件事,只是侧重点有所不同而已。  这两者都是通过在...

    89542767 评论0 收藏0
  • Node连接MySQL并封装其增删查改

    摘要:连接在这篇笔记中,将会介绍与的连接,并且会分享封装好的代码,在项目中是可以直接使用。操作查询添加删除更新结束连接这两种都行,第二种是强制结束。 Node 连接 mysql 在这篇笔记中,将会介绍node与mysql的连接,并且会分享封装好的代码,在项目中是可以直接使用。 安装 mysql 模块 npm install mysql 连接 mysql const mysql = requ...

    ShevaKuilin 评论0 收藏0
  • Node连接MySQL并封装其增删查改

    摘要:连接说到,可能大家会想到作为数据库,这里将会介绍与的连接,并分享了封装好的实例代码,在项目开发中可直接使用。操作查询添加删除更新结束连接这两种都行,第二种是强制结束。 showImg(https://segmentfault.com/img/bVbaIlR?w=900&h=500); Node连接Mysql 说到node,可能大家会想到MOngoDB作为数据库,这里将会介绍node与m...

    Maxiye 评论0 收藏0

发表评论

0条评论

xioqua

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<