我可以在一个准备好的语句中同时使用 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 上也没有发现任何关于同时使用 bindValue
和 bindParam
的信息准备好的声明。
对于 SQL 语句,bindValue()
和 bindParam()
之间没有区别。唯一的区别是 PHP 如何——或者更确切地说,何时——读取输入变量。所以你可以同时使用两者,尽管这可能会导致以后难以发现的问题(关于 SQL 操作的结果)。
所以最好避免混淆并坚持使用 bindValue()
除非你需要 bindParam()
的特殊行为。
$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 上也没有发现任何关于同时使用 bindValue
和 bindParam
的信息准备好的声明。
对于 SQL 语句,bindValue()
和 bindParam()
之间没有区别。唯一的区别是 PHP 如何——或者更确切地说,何时——读取输入变量。所以你可以同时使用两者,尽管这可能会导致以后难以发现的问题(关于 SQL 操作的结果)。
所以最好避免混淆并坚持使用 bindValue()
除非你需要 bindParam()
的特殊行为。