【问题标题】: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();

【问题讨论】:

  • 不,这不是必需的(这是准备好的语句的美妙之处)。
  • 我想说的是准备好的陈述的目的

标签: php validation pdo prepared-statement sql-injection


【解决方案1】:

不需要,原因有两个:

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

  2. 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 也会被转换成字符串?如果是,那么我认为存在安全漏洞
猜你喜欢
  • 2015-04-29
  • 2016-10-12
  • 2016-08-12
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多