php7使用mysqli预编译sql查询demo

预编译技术可以提高数据库效率,防止sql注入攻击。下面是一个mysqli的预编译查询demo。

数据库情况

这里假设我有一个test库,里面有一个user表,表中有id(int),username(string),money(double),sex(string),age(int)五列。

其中有一条数据是(id=1,username=‘admin’,money=1.23,sex=‘男’,age=18)。

一次简单的查询

下面我将以id和username和money为条件查询sex和age。

<?php
	//连接数据库,填写数据库主机、用户、密码、库名
	$mysqli=new mysqli(127.0.0.1, root, toor, test);
	if($mysqli->connect_error){
    
    
		die("连接失败!".$mysqli->connect_error);
	}
	
	//设置查询编码
	$mysqli->query("set names utf8");

    //编写sql语句,查询条件处用?占位
    $sql = "select sex,age from user where id= ? and username= ? and money= ?  ;";
    
    //初始化一个预编译语句
    $pre_sql = $mysqli->prepare($sql);
    
    //给$pre_sql绑定参数,即给其输入条件
    $id = 1;
    $username = 'admin';
    $money= 1.23;
    //i=>int s=>string d=>double,与后面的参数一一对应
    $pre_sql->bind_param('isd', $id,$username,$money);
   
 	//绑定结果集 也就是将查询结果直接给某参数,数量要能对应上
    $pre_sql->bind_result($result1,$result2);
    if($pre_sql->execute()){
    
    
        echo '<br> 执行成功!';
    }else{
    
    
        echo '<br> 执行失败' . $mysqli->error;
    }

    //处理查询结果
    if(!$pre_sql->fetch()){
    
     //没有内容
        die("No User");
    }else{
    
    //有内容,直接输出
        echo $result1.$result2;
    } 
    
    //关闭预编译语句
	$pre_sql->close();
	
	//关闭连接
    $mysqli->close();
?>

第二次查询

两次查询如果想使用同一个预编译变量$pre_sql,在之间要调用close()销毁预编译语句之后才能再次使用。

猜你喜欢

转载自blog.csdn.net/asd413850393/article/details/104183497