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);

//执行预处理语句
if($mysqli_stmt->execute()){
    echo $mysqli_stmt->insert_id;
}else{
    echo $mysqli_stmt->error;

}
$mysqli->close();

使用mysqli预处理防止sql注入:

$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官方手册,查手册是学习的最好方法~

时间: 2024-10-10 13:37:47

php mysqli扩展之预处理的相关文章

边记边学PHP-(十七)PHP使用MySQLi扩展库操作数据库2

从前天开始,我的电脑不知道怎么了,写程序的时候无缘无故就死机.还不是彻底死,鼠标还能动,就是点击不好使,也打不开任务管理器.昨晚检查一下硬盘,有六个坏道,也不知道是不是这个原因.但是我在玩的时候,只要不打开编译器写程序,啥事也没有.玩游戏也不回出现那种情况.把我搞得好烦. 四.Mysqli扩展库增强 MySQLi扩展库在基础操作上看着没什么不同,只是从面面向过程转换成了面向对象.但是既然是mysql扩展库的增强,那一定有强的地方.有如下代码: 1.批量执行sql语句 <?php //mysqli

验证mySqli扩展是否

<?php// createTime: 2016/9/9 21:57 //验证mySqli扩展是否//phpinfo(); //2.检测扩展是否已经加载//var_dump(extension_loaded('mysqli')) ;//bool(true) //3.检测函数是否存在var_dump(function_exists('mysqli_connect')); //4得到当前已经开启的扩展print_r(get_loaded_extensions());

linux下php的mysqli扩展安装

以前一直是在WAMP的环境下开发的,很少接触LAMP开发,现在公司里面需要用到LAMP环境,接下来就需要对该环境多多学习了. 今天在原有的php5.3的基础上升级为了php5.4版本,需要对环境进行一些修改,其中就涉及到了php模块的配置,WAMP下直接在php.ini中启用mysqli就行(去掉;extension=php_mysqli.dll前面的分号";"),但是Linux环境下不只要这样做,还要自己去添加mysqli的扩展文件,我以mysqli的添加为例进行记录. 首先到php

centos php7 安装mysqli扩展心得

在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装php7时没有configure mysqli 安装php方法:wget http://cn2.php.net/distributions/php-7.1.5.tar.gz tar zxvf php-7.1.5.tar.gz cd php-7.1.5 ./configure --with-php-co

PHPMyAdmin 显示缺mysqli 扩展的解决方法

今天在学PHP100视频教程时,装了phpMyAdmin.一开始下载的是最新版本phpMyAdmin-4.1.4-all-languages, 直接500错误,页面怎么也打不开.我用的PHP版本是老版本-PHP Version 5.4.0RC4.个人感觉可能是最新版本的PHPMYADMIN不支持老版本PHP吧,反正是怎么都显示500. 然后从PHP100网站上下载了phpMyAdmin-3.5.4-all-languages.按照从网上搜的安装说明, 1.放在了apache下的htdocs文件夹

mysqli扩展库操作mysql数据库

配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 1 <?php 2 //mysqli扩展库操作mysql数据库,面向对象 3 $mysqli=new MySQLi("localhost","root","root","test"); 4 if($mysqli->connect_

【小结】有关mysql扩展库和mysqli扩展库的crud操作封装

现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 3.PDO扩展库    面向对象操作 今天这篇博文主要要谈谈mysql扩展库和mysqli扩展库 主要是记录了着2套crud操作分装 以下代码段是关于mysqli扩展库关于crud操作的封装 header("Content-type:text/html;charset=utf-8"); c

phpMyAdmin配置及 错误 缺少 mysqli 扩展。请检查 PHP 配置

PHPMyadmin配置文件config.inc.php内容如下,在需要设置的地方增加了相关注释. 非常适合对数据库操作命令不熟悉的数据库管理者,下面我就说下怎么安装该工具: 1.先到网上下载phpmyadmin,再解压到可以访问的web目录下(如果是虚拟空间,可以解压后通过ftp等上传到web目录下),当然您可以修改解压后该文件的名称. 2.配置config文件 打开libraries下的config.default.php文件,依次找到下面各项,按照说明配置即可: A.访问网址 引用: $c

PHP使用mysqli扩展库实现增删改查(面向对象版)

mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和mysql扩展库大体一致,这次还是先抽取出来一个操作mysql的工具类,和调用的类. 1.mysqli扩展库操作数据库工具类 <?php //数据库操作类 class DBUtil{ private $host="localhost"; private $username="