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

Php 使用PDO::bindValue(带或不带类型标识符)和execute之间有什么区别吗?,php,mysql,pdo,Php,Mysql,Pdo,我已经使用PDO至少两年了,我注意到这三种方法都可以将值绑定到查询 做这三件事中的任何一件有什么区别、失败或理由吗。它们是否都是正确的,并且可以自由使用而不产生后果 将BindValue与类型标识符一起使用 使用不带类型标识符的BindValue 使用执行值中的数组绑定值 我知道以前有人问过这个问题,但我不知道应该使用哪一个以及如何处理。我还没有看到一篇文章解释不使用类型标识符的后果,这就是为什么我觉得可以发布这篇文章的原因。设置它是否会使用更多的资源,以便它能够自行判断,不设置它是否是一种不好

我已经使用PDO至少两年了,我注意到这三种方法都可以将值绑定到查询

做这三件事中的任何一件有什么区别、失败或理由吗。它们是否都是正确的,并且可以自由使用而不产生后果

将BindValue与类型标识符一起使用

使用不带类型标识符的BindValue

使用执行值中的数组绑定值


我知道以前有人问过这个问题,但我不知道应该使用哪一个以及如何处理。我还没有看到一篇文章解释不使用类型标识符的后果,这就是为什么我觉得可以发布这篇文章的原因。设置它是否会使用更多的资源,以便它能够自行判断,不设置它是否是一种不好的做法?只是好奇。

唯一的区别是bindValue允许您传递第三个参数:类型。使用execute时,所有值都绑定为字符串。使用bindValue,可以将值绑定为整数、布尔、BLOB或其他类型。有时这是绝对必要的,例如对于斑点。在其他情况下,这没有多大区别,例如MySQL将处理其中foo='42'绑定为字符串的情况,与其中foo=42绑定为int的情况相同

$query = $pdo->prepare("INSERT INTO `cake` (`name`) VALUES(:name)");
$query->bindValue(":name", $cakeName, PDO::PARAM_STR);
$query->execute();
$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