MySQLi面向对象实践---预处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQLi面向对象实践---预处理相关的知识,希望对你有一定的参考价值。

面向对象的预处理和面向过程的预处理一样,只是转换一种表现形式而已,可以参照一下面向过程的方法http://www.cnblogs.com/-beyond/p/7577155.html

面向对象的预处理涉及以下几个函数:

mysqli_stmt mysqli::prepare ( string $query )

bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )

bool mysqli_stmt::execute ( void )

mysqli_result mysqli_stmt::get_result ( void )

void mysqli_stmt::free_result ( void )

bool mysqli_stmt::close ( void )

void mysqli_result::free_result ( void )

具体用法如下

<?php 
	$db=new mysqli("localhost","root","root","test");

    //预处理(增删改)
    $sql="delete from aaa where uid = ?;";
    $stmt=$db->prepare($sql);
    $uid=4;
    $stmt->bind_param(‘i‘,$uid);
    // $stmt->bind_param(‘i‘,4);wrong
    $stmt->execute();
    $stmt->free_result();
    $stmt->close();

    //预处理(查)
    $sql="select * from aaa where uid >?;";
    $stmt=$db->prepare($sql);
    $uid=1;
    $stmt->bind_param("i",$uid);
    if($stmt->execute()){
	    echo "there are ".$stmt->num_rows." rows\\n";
	    echo "there are ".$stmt->field_count." fields\\n";
	   	$result=$stmt->get_result();
	   	while(list($id,$name)=$result->fetch_array()){
	   		echo $id."=>".$name."\\n";
	   	}
	   $stmt->free_result();
	   $result->free_result();
    } else {
    	echo "failed to execute\\n";
    }
	$stmt->close();

	//关闭数据库
	$db->close();
 ?>

其中关于参数绑定,还有读取结果集的问题,请查看前两篇博客

以上是关于MySQLi面向对象实践---预处理的主要内容,如果未能解决你的问题,请参考以下文章

MySQLi面向过程实践---预处理

MySQLi面向对象实践--select

MySQLi面向过程实践---事务处理

MySQLi面向对象实践--multi_query

PHPmysqli扩展整理,包括面向过程和面向对象的比较事务控制批量执行预处理

Mysqli面向对象操作数据库