使用PDO :: bindValue(带或不带类型标识符)与执行之间有什么区别吗?

时间:2015-04-09 14:09:19

标签: php mysql pdo

我已经使用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

我知道之前已经问过这个问题,虽然我还没有看到应该使用哪一个以及如何处理它。我还没有看到一个解释不使用类型标识符的后果,这就是为什么我觉得可以发布这个。是不是设置它会使用更多的资源,所以它可以尝试自己判断,不设置它是不好的做法?好奇。

1 个答案:

答案 0 :(得分:0)

唯一的区别是bindValue允许您传递第三个参数:类型。使用execute,所有值都绑定为字符串。使用bindValue,您可以将值绑定为整数,bools,blob或其他类型。有时这是绝对必要的,例如对于blob。在其他情况下,它并没有太大的区别,例如MySQL将WHERE foo = '42'(绑定为字符串)与WHERE foo = 42(绑定为int)相同。