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

标签 php mysql pdo

我使用 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/

相关文章:

php - 从数据库中删除一行的某些部分(一组数据库行中的一个值)

php - Xdebug Profiler 无法在 apache 上工作

php - 推进 - 从哪里开始

mysql - MySQL 中的舍入函数

PHP-MySQL 错误 : Invalid parameter number: parameter was not defined

php - 如何将我的数据从一个按钮返回到另一个 php 页面

mysql - RDS MySQL 高内存消耗

php - 插入数据后检查数据库并更新 ListView

PHP PDO 上一个函数的lastinsertid

php - 为什么受影响的行数是错误的?