我已经使用PDO至少两年了,我注意到所有这三种方法都可用于将值绑定到查询。
是否有任何差异,垮台或反对做这三者中的任何一个的理由。它们都是正确的,可以自由使用而没有后果吗?
将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();
使用执行值中的数组绑定值
$query = $pdo->prepare("INSERT INTO `cake` (`name`) VALUES(:name)");
$query->execute([":name"=>$cakeName]); // shorthand array from PHP 5.4
我知道之前已经问过这个问题,虽然我还没有看到应该使用哪一个以及如何处理它。我还没有看到一个解释不使用类型标识符的后果,这就是为什么我觉得可以发布这个。是不是设置它会使用更多的资源,所以它可以尝试自己判断,不设置它是不好的做法?好奇。
答案 0 :(得分:0)
唯一的区别是bindValue
允许您传递第三个参数:类型。使用execute
,所有值都绑定为字符串。使用bindValue
,您可以将值绑定为整数,bools,blob或其他类型。有时这是绝对必要的,例如对于blob。在其他情况下,它并没有太大的区别,例如MySQL将WHERE foo = '42'
(绑定为字符串)与WHERE foo = 42
(绑定为int)相同。