• php mysqli扩展之预处理


     在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理。

      在mysqli操作中常常涉及到它的三个主要类:MySQLi类,MySQL_STMT类,MySQLi_RESULT类。预处理主要是利用MySQL_STMT类完成的。

      预处理是一种重要的 防止SQL注入的手段,对提高网站安全性有重要意义。

      本文案例为 数据库名为test,数据表名为test,  字段有id ,title 两个,id自增长主键。

     

      使用mysqli预处理执行插入操作:

    复制代码
    <?php 
    
    define("HOST", "localhost");
    define("USER", 'root');
    define("PWD", '');
    define("DB", 'test');
    
    $mysqli=new Mysqli(HOST,USER,PWD,DB);
    
    if ($mysqli->connect_errno) {
        "Connect Error:".$mysqli->connect_error;
    }
    
    $mysqli->set_charset('utf8');
    
    $id='';
    $title='title4';
    //用?代替 变量
    $sql="INSERT test VALUES (?,?)";
    //获得$mysqli_stmt对象,一定要记住传$sql,预处理是对sql语句的预处理。
    $mysqli_stmt=$mysqli->prepare($sql);
    
    //第一个参数表明变量类型,有i(int),d(double),s(string),b(blob)
    $mysqli_stmt->bind_param('is',$id,$title); //bind_param的第二个参数不能直接写数值,必须用变量传递过来
    
    //执行预处理语句
    if($mysqli_stmt->execute()){
    echo $mtsqki_stmt->affected_rows; //影响行数 echo $mysqli_stmt->insert_id; //新增的id }else{ echo $mysqli_stmt->error; } $mysqli->close();
    复制代码

    使用mysqli预处理进行查询验证(登录等场景应用):

    复制代码
    $id='4';
    $title='title4';
    
    $sql="SELECT * FROM test WHERE id=? AND title=?";
    $mysqli_stmt=$mysqli->prepare($sql);
    $mysqli_stmt->bind_param('is',$id,$title);
    
    if ($mysqli_stmt->execute()) {
        $mysqli_stmt->store_result();
        if($mysqli_stmt->num_rows>0){
            echo "验证成功";
        }else{
            echo "验证失败";
        }
    }
        $mysqli_stmt->free_result();
        $mysqli_stmt->close();
    复制代码

    使用mysqli预处理执行查询语句:

    复制代码
    $sql="SELECT id,title FROM test WHERE id>=?";
    
    $mysqli_stmt=$mysqli->prepare($sql);
    $id=1;
    
    $mysqli_stmt->bind_param('i',$id);
    
    if($mysqli_stmt->execute()){
        $mysqli_stmt->store_result();
    //将一个变量绑定到一个prepared语句上用于结果存储 $mysqli_stmt->bind_result($id,$title); while ($mysqli_stmt->fetch()) { echo $id.' :'.$title.'<br/>'; } }
    复制代码

        更多mysqli技术请参见php官方手册,查手册是学习的最好方法~

    越学习越感到自己无知
  • 相关阅读:
    C#委托本质探索 四、方法变量内、外混合调用
    calibredrv 对layer做操作
    2021年11月工作笔记
    2022年1月工作资料
    2021年12月工作资料
    MySQL 5.7 MGR原理及部署
    在虚拟机上安装redis集群,redis使用版本为4.0.5,本机通过命令客户端可以连接访问,外部主机一直访问不了
    mongoDB中的的常用语法
    使用Nginx做图片服务器时候,配置之后图片访问一直是 404问题解决
    jquery.cookie() 方法的使用(读取、写入、删除)
  • 原文地址:https://www.cnblogs.com/JeromeZ/p/9234588.html
Copyright © 2020-2023  润新知