php mysqli扩展之预处理

Posted JeromeZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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官方手册,查手册是学习的最好方法~

 

越学习越感到自己无知

以上是关于php mysqli扩展之预处理的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的MySQLi扩展学习mysqli的事务与预处理语句

PHP中的MySQLi扩展学习MySQLI_STMT对象操作

如何在php中扩展mysqli插件。

PHP中的MySQLi扩展学习MySQLi介绍

PHP中的MySQLi扩展学习MySQLi介绍

腾讯云服务器下,怎么安装php的mysqli扩展