PHP当中SQL语句的预处理
一、什么是预处理
1、实现SQL语句的预处理
2、首先需要预处理一个待执行的SQL语句模板
3、然后为该模板进行参数绑定
4、最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行
二、预处理的实现——预处理SQL模板
1、mysqi_prepare()函数用于预处理一个待执行的SQL语句
mysqli_stmt mysqli_prepare ( mysqli $link , string $query )
参数$link表示数据库连接
$query表示SQL语句模板当函数执行后,成功时返回预处理对象,失败时返回false。
2、在编写SQL语句模板时,其语法是将数据部分使用“?”占位符代替。
#SQL正常语法
UPDATEstudent
SETname
=‘Ileana’ WHEREid
=1;
#SQL模板语法
UPDATEstudent
SETname
=? WHEREid
=?;
SQL语句模板语法,对于字符串内容,“?”占位符的两边无需使用引号包裹
3、mysqli_stmt_bind_param()函数用于将变量作为参数绑定到预处理语句中。
bool mysqli_stmt_bind_param (
mysqli_stmt $stmt, // 预处理对象
string KaTeX parse error: Expected 'EOF', got '&' at position 24: …// 数据类型 mixed &̲var1, // 绑定变量1(引用传参)
[, mixed&$… ] // 绑定变量n…(可选参数,可绑定多个,引用传参)
)
$stmt表示由mysqli_prepare()函数返回的预处理对象
$types用于指定被绑定变量的数据类型,它是由一个或多个字符组成的字符串
types字符串的长度一致
该函数执行成功时返回true,失败时返回false
4、参数绑定时的数据类型字符
5、为了更好地理解mysqli_stmt_bind_param()函数的使用方法。
// 连接数据库、设置字符集
link, ‘utf8’);
// 预处理SQL模板
link, ‘UPDATEstudent
SETname
=? WHEREid
=?’);
// 参数绑定(将变量id按顺序绑定到SQL语句“?”占位符上)
mysqli_stmt_bind_param($stmt, ‘si’, $name, $id);
SQL语句中有两个“?”占位符,分别表示name字段和id字段
name字段是字符串类型,id字段是整型
因此,函数mysqli_stmt_bind_param()的第2个参数为“si”
当代码执行后,变量id就已经通过引用传参的方式进行了参数绑定
6、在完成参数绑定后,接下来应该将数据内容发送给MySQL执行。
mysqli_stmt_execute()函数用于执行预处理,其声明如下。
bool mysqli_stmt_execute ( mysqli_stmt $stmt )
$stmt参数表示由mysqli_prepare()函数返回的预处理对象
函数执行成功返回true,执行失败返回false