📜  PHPbindParam和bindValue的区别(1)

📅  最后修改于: 2023-12-03 15:33:39.924000             🧑  作者: Mango

PHP bindParam和bindValue的区别

PHP bindParam和bindValue都是用于防止SQL注入的重要函数。但是它们之间有些微妙的区别。

区别
bindParam

bindParam函数接受引用参数,即传递参数的地址。这意味着,一旦参数的值发生变化,绑定给参数的变量也会随之改变。

语法:

PDOStatement::bindParam (mixed $parameter
                            , mixed &$variable
                            [, int $data_type = PDO::PARAM_STR
                            [, int $length [, mixed $driver_options]]] ) : bool

示例:

$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$name = 'John';
$stmt->bindParam(':name', $name);
$name = 'Bob'; // 这将会当做绑定
$stmt->execute(); // 查询的将会是名为“Bob”的用户
bindValue

bindValue函数接受原始的值作为参数。一旦参数的值发生变化,绑定给参数的变量不会改变。

语法:

PDOStatement::bindValue (mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) : bool

示例:

$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$name = 'John';
$stmt->bindValue(':name', $name);
$name = 'Bob'; // 这不会当做绑定
$stmt->execute(); // 查询的将会是名为“John”的用户
建议

综合上述描述,建议在以下情况下使用bind:

  • 绑定变量时,bind更安全,适用于传递变量。
  • 在需要执行相同的SQL语句多次时,例如,将来自循环的变量插入数据库表格行时,bindParam比bindValue更快。

综合上述描述,建议在以下情况下使用bindValue:

  • 当您必须按原样保留值时。
  • 当需要一次性绑定变量时,例如,动态SQL查询。
总结

在选择使用bindParam还是bindValue之前,请考虑您的要求和其他变量需要动态绑定到查询的频率。由于bindParam更安全且在多次绑定变量时比bindValue更快,建议您优先使用bindParam。