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正常语法
UPDATE student SET name=‘Ileana’ WHERE id=1;
#SQL模板语法
UPDATE student SET name=? WHERE id=?;

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用于指定被绑定变量的数据类型,它是由一个或多个字符组成的字符串
varvar(可以是多个参数)表示需要绑定的变量,且其个数必须与types字符串的长度一致
该函数执行成功时返回true,失败时返回false

4、参数绑定时的数据类型字符
PHP当中SQL语句的预处理
5、为了更好地理解mysqli_stmt_bind_param()函数的使用方法。

// 连接数据库、设置字符集
link=mysqliconnect(localhost,root,123456,itheima);mysqlisetcharset(link = mysqli_connect('localhost', 'root', '123456', 'itheima'); mysqli_set_charset(link, ‘utf8’);
// 预处理SQL模板
stmt=mysqliprepare(stmt = mysqli_prepare(link, ‘UPDATE student SET name=? WHERE id=?’);
// 参数绑定(将变量namename、id按顺序绑定到SQL语句“?”占位符上)
mysqli_stmt_bind_param($stmt, ‘si’, $name, $id);

SQL语句中有两个“?”占位符,分别表示name字段和id字段
name字段是字符串类型,id字段是整型
因此,函数mysqli_stmt_bind_param()的第2个参数为“si”
当代码执行后,变量namename和id就已经通过引用传参的方式进行了参数绑定

6、在完成参数绑定后,接下来应该将数据内容发送给MySQL执行。

mysqli_stmt_execute()函数用于执行预处理,其声明如下。

bool mysqli_stmt_execute ( mysqli_stmt $stmt )

$stmt参数表示由mysqli_prepare()函数返回的预处理对象
函数执行成功返回true,执行失败返回false