我可以在一个准备好的语句中同时使用 bindValue 和 bindParam 吗?

Can i use both bindValue and bindParam on a single prepared statement?

$nome = 'nome';
$stmt = $db->prepare("SELECT `nome`, `mov`, `gen` FROM table WHERE gen LIKE :gen AND nome = :nome");
$stmt->bindValue(':gen', '%'.$gen.'%', PDO::PARAM_STR); 
$stmt->bindParam(':nome', $nome, PDO::PARAM_STR);     
$stmt->execute();

如您所见,我正在使用 bindValue 将值绑定到运算符 LIKE 上,因为 bindParam 不允许使用字符串。

我在这里测试过,我看到了 none 个错误,而且我在 google 上也没有发现任何关于同时使用 bindValuebindParam 的信息准备好的声明。

对于 SQL 语句,bindValue()bindParam() 之间没有区别。唯一的区别是 PHP 如何——或者更确切地说,何时——读取输入变量。所以你可以同时使用两者,尽管这可能会导致以后难以发现的问题(关于 SQL 操作的结果)。

所以最好避免混淆并坚持使用 bindValue() 除非你需要 bindParam() 的特殊行为。