mysqli预处理详解

14 篇文章 0 订阅

https://www.php.net/manual/en/class.mysqli-stmt.php
mysqli_stmt 类

/* 增,删,改 错误返回-1 */
 // $stmt->execute();	 
	       //  $stmt->store_result();	         
	        // echo '共有'.$stmt->num_rows.'行<br >';//输出结果数	         
	        // echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数---增,删,改,查(如果没有更改,影响行数为0),新增错误返回-1
/*查询 语句*/
$sql = "SELECT * FROM  table WHERE  Url=? and id=?   ";	 
	 $stmt = $conn->stmt_init();
	 if(!$stmt->prepare($sql))
	 {
	     /*语句错误  */
	     print "Failed to prepare statement\n".'<br>';
	     var_dump($sql);
	 }
	 else
	 {
	     $stmt->bind_param("si", $continent,$id);    
	     $continent='xxx';
	     $id=1;	          
         $stmt->execute();
         $result = $stmt->get_result();
         echo $result->num_rows;//输出结果数
         while ($row = $result->fetch_assoc())
         {
             // fetch_assoc 以一个关联数组方式抓取一行结果。
             //fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
             // fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。             
             var_dump($row);
             foreach ($row as $r)
             {
                 //echo $r.'<br>';
             } 
         }
	   }
/*新增 语句*/
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
 
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
 
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
 
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
 
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
 
echo "新记录插入成功";
$conn= new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);

if($conn->connect_errno){
    die('Connect Error : '.$conn->connect_error);
}
 $sql = "SELECT * FROM table WHERE id=?   ";	 
	 $stmt = $conn->stmt_init();
	 if(!$stmt->prepare($sql))
	 {
	     /*语句错误 输出 $sql  */	    
	     var_dump($sql);
	 }
	 else
	 {
	     $stmt->bind_param("i", $continent);	     
	     $continent_array = array(106);
	     /*如果 同个语句 不同的值 多次查询*/
	     foreach($continent_array as $continent)
	     {        
	         $stmt->execute();
	         $result = $stmt->get_result();
	         echo $result->num_rows;//输出结果数
	         while ($row = $result->fetch_assoc())
	         {
	             // fetch_assoc 以一个关联数组方式抓取一行结果。
	             //fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
	             // fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
	             //echo $row['id'];
	             var_dump($row);      
	         }
	        
	         
	     }
	 }
$conn= new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);

if($conn->connect_errno){
    die('Connect Error : '.$conn->connect_error);
}
 $sql = "SELECT * FROM table ad_phone_login_info WHERE id=?   ";
	 //$sql=" UPDATE `ad_phone_login_info` SET `pass_wrong_time_status` = ? WHERE `id` = 104 ";
	 /**/
	 $stmt = $conn->stmt_init();
	 if(!$stmt->prepare($sql))
	 {
	     /*语句错误 输出 $sql  */	    
	     var_dump($sql);
	 }
	 else
	 {
	     $stmt->bind_param("i", $continent);	     
	     $continent_array = array(106);
	     /*如果 同个语句 不同的值 多次查询*/
	     foreach($continent_array as $continent)
	     {
	         
	        // $stmt->execute();	 
	       //  $stmt->store_result();	         
	        // echo '共有'.$stmt->num_rows.'行<br >';//输出结果数	         
	        // echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数---增,删,改,查(如果没有更改,影响行数为0),新增错误返回-1
	         
	         $stmt->execute();
	         $result = $stmt->get_result();
	         echo $result->num_rows;//输出结果数
	         while ($row = $result->fetch_assoc())
	         {
	             // fetch_assoc 以一个关联数组方式抓取一行结果。
	             //fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
	             // fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
	             //echo $row['id'];
	             var_dump($row);
	             foreach ($row as $r)
	             {
	                 //echo $r.'<br>';
	             }
	             
	         }
	        
	         
	     }
	 }

mysqli预处理的学习主要是指mysqli_stmt对象的方法的使用,下面我们通过一个例子来分析各个方法的使用方法和作用:
代码如下:

/* 连接mysql */
$mysqli = new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);

if($mysqli->connect_errno){
    die('Connect Error : '.$mysqli->connect_error);
}

/* 预处理sql */
$sql = "SELECT * FROM user WHERE id>=?";

/* 获取mysqli_statement对象*/
$stmt = $mysqli->prepare($sql);

/* 绑定参数 */
$stmt->bind_param('i',$id);//后面的变量 是 哪个?,多少个?,多少个变量,
/*
i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(布尔值)
*/

/* 定义参数 */
$id = 6;

/* 执行上面的sql语句 */
if($stmt->execute()) {
    /* 
    默认select的结果集保存在mysql服务器内存中,并且通过fetch
    一条一条的返回给php,如果想在php中对该结果集进行操作,可以
    使用下面的方法,该函数内部对mysqli_statement对象的部分属
    性重置为真实的结果,例如num_rows,affected_rows等属性
    */
    $stmt->store_result();

    echo '共有'.$stmt->num_rows.'行<br >';//输出结果数

    echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数

    /* 将结果集中的值付给对应的变量 */
    $stmt->bind_result($id,$name,$password);

    /* 移动结果集的内部指针到最后 */
    $stmt->data_seek($stmt->num_rows-1);

    /* 使用fetch一个个获取结果集中的内容 */
    while($stmt->fetch()) {
        echo '用户编号:',$id,'<br />';
        echo '用户名:',$name,'<br />';
        echo '用户密码:',$password,'<br />';
        echo '<hr />';
    }

    /* 释放由store_result产生的结果集 */
    $stmt->free_result();

    /* 关闭mysqli_statement对象 */
    $stmt->close();
}

/* close connection */
$mysqli->close();

分析:在上面的例子中几乎涵盖了预处理所有常用的方法,希望大家多思考预处理机制的原理,这样就能知道在适当的时候使用合适的方法了。

转载自https://blog.csdn.net/qq_17481779/article/details/51144605?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control&dist_request_id=14eef756-2f67-4774-9f5d-969f24e68425&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值