登录
首页 >  数据库 >  MySQL

封装mysqli_Prepare的query函数

来源:SegmentFault

时间:2023-01-19 18:10:35 242浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《封装mysqli_Prepare的query函数》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下MySQL、PHP,希望所有认真读完的童鞋们,都有实质性的提高。

使用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);
}

今天带大家了解了MySQL、PHP的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表