PHP bindParam()、bindValue()和execute()的用法(附带实例)
当预处理 SQL 语句中有占位符时,有 3 个方法可以为占位符绑定数据,分别是 execute() 方法、bindParam() 方法和 bindValue() 方法。
bindParam() 方法和 bindValue() 方法的区别是,bindParam() 方法是将占位符绑定到指定的变量名上,使用 execute() 方法执行预处理 SQL 语句时,只需要修改变量名的值;而 bindValue() 方法是将值绑定到占位符上,使用 execute() 方法执行预处理 SQL 语句时,每修改一次值,都需要重复执行一次 bindValue() 方法和 execute() 方法。
下面对预处理语句中为占位符绑定数据的 3 个方法进行讲解。
下面演示如何使用 execute() 方法为问号占位符绑定数据,具体代码如下:
下面演示使用 execute() 方法为参数占位符绑定数据。为参数占位符绑定数据时,可以使用“:参数名”或“参数名”的形式。修改上面程序中的第 4~8 行代码,具体代码如下:
使用 bindParam() 方法为问号占位符和参数占位符绑定数据的示例代码如下:
按照上述任意一种方式为占位符绑定指定的变量后,即可进行变量的赋值和预处理 SQL 语句的执行,示例代码如下:
使用 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']);在上述代码中:
- 第 4 行代码定义了预处理 SQL 语句;
- 第 5 行代码调用 prepare() 方法准备预处理 SQL 语句,prepare() 方法返回的 $stmt 是 PDOStatement 类对象;
- 第 6~8 行代码为问号占位符绑定数据并执行预处理 SQL 语句。
下面演示使用 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();