使用PHP的mysqli扩展中预处理语句

mysqli_stmt预处理类(推荐你使用的类)

和mysqli和mysqli_result相比优点:
1. mysqli和mysqli_result参完成的功能,都可以使用mysqli_stmt完成

2. 效率上:高, 就是如果执行多次相同的语句,只有语句数据不同, 因为将一条语句在服务器端准备好,然后将不同的值传给服务器,再让这条语句执行

编译一次,使用多次

3. 安全上:SQL注入(? 占位) ,后期传的值不会当成SQL语句

效率高,安全,这是我们使用mysqli_stmt的原因,所以推荐你使用它

<?php
	$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");

//$stmt=$mysqli->stmt_init();
//$sql="";
//$stmt->prepare($sql);

	//准备好一条语句放到服务器中,插入语句
        $sql="insert into shops(name, price, num, desn) values(?, ?, ?, ?)";
	$sql="update shops set name=?, price=?, num=?, desn=? where id=?";

	$stmt=$mysqli->prepare($sql);//比较方便

	//给占位符号每个?号传值(绑定参数) i整型  d double型 s 字符串 b二进制    不知道什么类型用字符串
	$stmt->bind_param("sdisi", $name, $price, $num, $desn,$id);//必须传变量,引用

	$name="zhangsan1";
	$price=56.781;
	$num=661;
	$desn="hello good1";
	$id=100;	

	//执行
	$stmt->execute();

	$name="lisi1";
	$price=56.781;
	$num=661;
	$desn="aaaaaaaa1";
	$id=101;
	//执行
	$stmt->execute();

	$name="wangwu1";
	$price=56.781;
	$num=961;
	$desn="bbbbbbbbb1";
	$id=102;
	//执行
	$stmt->execute();

	$name="zhaoliu111";
	$price=56.7811;
	$num=6118;
	$desn="cccccccccccc111";
	$id=103;

	//执行
	$stmt->execute();

	echo "最后ID".$stmt->insert_id."<br>";
	echo "影响了".$stmt->affected_rows."行<br>";

	$stmt->close();
posted @ 2012-12-18 11:38  ChoiceShan  阅读(726)  评论(0)    收藏  举报