首页 > 编程笔记 > PHP笔记 阅读:44

PHP bindParam()、bindValue()和execute()的用法(附带实例)

当预处理 SQL 语句中有占位符时,有 3 个方法可以为占位符绑定数据,分别是 execute() 方法、bindParam() 方法和 bindValue() 方法。

bindParam() 方法和 bindValue() 方法的区别是,bindParam() 方法是将占位符绑定到指定的变量名上,使用 execute() 方法执行预处理 SQL 语句时,只需要修改变量名的值;而 bindValue() 方法是将值绑定到占位符上,使用 execute() 方法执行预处理 SQL 语句时,每修改一次值,都需要重复执行一次 bindValue() 方法和 execute() 方法。

下面对预处理语句中为占位符绑定数据的 3 个方法进行讲解。

PHP execute()方法

execute() 方法的参数 $input_parameters 是一个数组,该数组的元素个数必须与预处理 SQL 语句中的占位符数量相同。当占位符是问号占位符时,$input_parameters 必须是一个索引数组;当占位符是参数占位符时,$input_parameters 必须是一个关联数组。

下面演示如何使用 execute() 方法为问号占位符绑定数据,具体代码如下:
<?php
$dsn = 'mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', '123456');
$sql = 'INSERT INTO `student` (`name`, `mobile`) VALUES (?, ?)';
$stmt = $pdo->prepare($sql);
$stmt->execute(['Charles', '1111']);
$stmt->execute(['Andy', '2222']);
$stmt->execute(['Bruce', '3333']);
在上述代码中:
下面演示使用 execute() 方法为参数占位符绑定数据。为参数占位符绑定数据时,可以使用“:参数名”或“参数名”的形式。修改上面程序中的第 4~8 行代码,具体代码如下:
$sql = 'INSERT INTO `student` (`name`, `mobile`) VALUES ' . '(:name, :mobile)';
$stmt = $pdo->prepare($sql);
$stmt->execute([':name' => 'Charles', ':mobile' => '1111']);
$stmt->execute([':name' => 'Andy', ':mobile' => '2222']); 
$stmt->execute(['name' => 'Bruce', 'mobile' => '3333']);
在上述代码中,第 3~4 行代码使用“:参数名”的形式为参数占位符绑定数据;第 5 行代码使用“参数名”的形式为参数占位符绑定数据。

PHP bindParam()方法

使用 bindParam() 方法为问号占位符绑定数据时,bindParam() 方法的第 1 个参数是一个以 1 开始的数字,表示对应预处理中的第几个问号占位符;使用 bindParam() 方法为参数占位符绑定数据时,bindParam() 方法的第 1 个参数是“:参数名”或“参数名”的形式。

使用 bindParam() 方法为问号占位符和参数占位符绑定数据的示例代码如下:
// 绑定问号占位符
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $entry_date);
// 绑定参数占位符
$stmt->bindParam(':参数名', $name);
$stmt->bindParam('参数名', $entry_date);  // 省略“:”

按照上述任意一种方式为占位符绑定指定的变量后,即可进行变量的赋值和预处理 SQL 语句的执行,示例代码如下:
list($name, $entry_date) = ['Charles', '2019-1-1'];
$stmt->execute();
list($name, $entry_date) = ['Andy', '2019-1-1'];
$stmt->execute();

PHP bindValue()方法

bindValue() 方法和 bindParam() 方法的第 1 个参数的使用方法相同;bindValue() 方法的第 2 个参数用于传入一个值,它无须进行变量的绑定,使用较为方便。

使用 bindValue() 方法为问号占位符和参数占位符绑定数据的示例代码如下:
// 绑定问号占位符
$stmt->bindValue(1, 'Charles');
$stmt->bindValue(2, '2019-1-1');
$stmt->execute();
// 绑定参数占位符
$stmt->bindValue(':参数名', 'Charles');
$stmt->bindValue('参数名', '2019-1-1');   // 省略“:”
$stmt->execute(); 

相关文章