📅  最后修改于: 2023-12-03 15:33:39.924000             🧑  作者: Mango
PHP bindParam和bindValue都是用于防止SQL注入的重要函数。但是它们之间有些微妙的区别。
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函数接受原始的值作为参数。一旦参数的值发生变化,绑定给参数的变量不会改变。
语法:
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:
综合上述描述,建议在以下情况下使用bindValue:
在选择使用bindParam还是bindValue之前,请考虑您的要求和其他变量需要动态绑定到查询的频率。由于bindParam更安全且在多次绑定变量时比bindValue更快,建议您优先使用bindParam。