在 Php PDO 的 bindValue 中使用 $id 之前是不是需要使用 (int)$id

Posted

技术标签:

【中文标题】在 Php PDO 的 bindValue 中使用 $id 之前是不是需要使用 (int)$id【英文标题】:Do I need to use (int)$id before I use $id in bindValue in Php PDO在 Php PDO 的 bindValue 中使用 $id 之前是否需要使用 (int)$id 【发布时间】:2013-05-28 15:02:52 【问题描述】:

我刚开始使用 php 数据对象,我不确定的一件事是在查询中使用某个变量之前是否必须验证它是否为整数。例如,像这样:

$id = (int)$_POST['id']; // is this required    

$query = $pdo->prepare("SELECT * FROM `articles` WHERE `id` = ?");

$query->bindValue(1, $id);

$query->execute();

【问题讨论】:

不,这不是必需的(这是准备好的语句的美妙之处)。 我想说的是准备好的陈述的目的 【参考方案1】:

不需要,原因有两个:

    您正在让 PDO 知道您将在数据库中查询列 ID。 PDO 不会解析 $_POST['id'] 中的任何内容。

    bindValue 的第二个值会自动转换为字符串(或您可能想要选择的任何类型)。 Hereint $data_type = PDO::PARAM_STR

【讨论】:

是的,我总是必须使用 PDO::PARAM_STR 吗?还是指定变量的类型? 这是bindValue 的默认可选参数。所以你不需要指定。 例如这个查询: $query = $pdo->prepare("SELECT * FROM account WHERE name = ? AND id = ?"); $query->bindValue(1, $_POST['name']); $query->bindValue(2, $_POST['id']); $查询->执行();所以我不需要指定name是字符串,id是整数? 绑定的值不会被解析,它们被转换为字符串。 那么即使是 id 也会被转换成字符串?如果是,那么我认为存在安全漏洞

以上是关于在 Php PDO 的 bindValue 中使用 $id 之前是不是需要使用 (int)$id的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO 与 bindParam 与 bindValue? [复制]

PHP扩展PDO MySQL之PDOStatement::bindParam vs bindValue

在 PDO::bindValue() 中使用显式数据类型有啥意义?

PDO->bindParam、PDO->bindValue 和 PDO->closeCursor

如何使用 PDO 在 PHP 中绑定 bigint 值?

PDO令牌是否需要匹配bindValue 1:1?