mysqli与MySQL交互的预处理语句
在编写PHP代码执行SQL语句的时候,很多情况下我们都是相似的语句,只是个别的参数不同,针对这种重复执行相似语句的情况,MySQL4.1版本开始提供了一种名为预处理语句的机制,它可以将整个语句只向MySQL服务器发送一次,以后只有参数发生变化,MySQL服务器只需对语句的结构做一次分析就够了。这既减少了需要传输的数据量,还提高语句的处理效率。
1)准备一个用于执行的SQL语句
准备的SQL语句里面使用占位符"?",来代表将要改变的参数
$query=‘insert into 表(字段1,字段2...) values(?,?...)‘;
$stmt=mysqli_prepare($link,$query);
2)将变量作为参数绑定到prepared语句上
mysqli_stmt_bind_param($stmt ,‘values $types‘,$var1,$var2...);
参数string $types说明:表示后面多个可选参数变量的数据类型,一一对应.
i:int类型
d:double或者float类型
s:字符串类型
b:二进制数据类型(BLOB、二进制字符串)
例:mysqli_stmt_bind_param($stmt ,‘is‘,$val1,$val2);
表示$query变量中的两个占位符第一个为“i”类型并赋值给$val1,第一个为“s”类型并赋值给$val2
3)执行一个prepared准本好的语句
在执行语句前要先给$val1和$val2赋值
mysqli_stmt_execute ($stmt);
4)将查询出的数据绑定到PHP变量上
mysqli_stmt_bind_result($stmt,$var1,$vae2...);
5)从一个prepared语句中抓取结果到指定变量中
mysqli_stmt_fetch ($stmt);
6)从一个prepared语句返回结果集元数据,配合相关函数,可以用来获得字段的相关信息
mysqli_stmt_result_metadata($stmt);
①mysqli_fetch_field();
②mysqli_fetch_fields();
7)取回一个结果集
mysqli_stmt_store_result($stmt);
取回之后可以使用mysqli_stmt_num_rows($stmt);返回语句结果集中的行数
8)释放给定语句处理存储的结果集所占内存
mysqli_stmt_free_result($stmt);
9)如果在执行SQL语句的时候发生错误,可以使用以下函数处理错误原因
mysqli_stmt_errno ($link);(返回int类型)
mysqli_stmt_error ($link);(返回string类型)
10)关闭一个prepared语句
mysqli_stmt_close($stmt);