我使用 PDO 至少两年了,我注意到所有这三种方法都可用于将值绑定(bind)到查询。
是否有任何区别、失败或反对执行这三项中的任何一项的理由。它们都正确并且可以自由使用而不会产生任何后果吗?
将 BindValue 与类型标识符结合使用
$query = $pdo->prepare("INSERT INTO `cake` (`name`) VALUES(:name)");
$query->bindValue(":name", $cakeName, PDO::PARAM_STR);
$query->execute();
在没有类型标识符的情况下使用 BindValue
$query = $pdo->prepare("INSERT INTO `cake` (`name`) VALUES(:name)");
$query->bindValue(":name", $cakeName);
$query->execute();
在执行值中使用数组绑定(bind)值
$query = $pdo->prepare("INSERT INTO `cake` (`name`) VALUES(:name)");
$query->execute([":name"=>$cakeName]); // shorthand array from PHP 5.4
我知道之前有人问过这个问题,但我还没有看到应该使用哪个问题以及如何处理它。我也没有看到有人解释不使用类型标识符的后果,这就是为什么我觉得可以发布它。不设置它会占用更多的资源所以它可以尝试自己判断,不设置它是不是不好的做法?只是好奇。
最佳答案
唯一的区别是 bindValue
允许您传递第三个参数:类型。使用 execute
,所有值都绑定(bind)为字符串。使用 bindValue
,您可以将值绑定(bind)为整数、 bool 值、blob 或其他类型。有时这是绝对必要的,例如对于 Blob 。在其他情况下,它并没有太大的区别,例如MySQL 将处理 WHERE foo = '42'
(绑定(bind)为字符串)与 WHERE foo = 42
(绑定(bind)为 int)相同。
关于php - 使用 PDO::bindValue(带或不带类型标识符)与执行之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29540886/