PHP PDO使用bindParam第一个参数没有冒号

时间:2014-08-31 11:28:44

标签: php mysql pdo

请检查

  $user_id = (int)$_GET['user_id'];
  $sql = 'DELETE FROM users WHERE user_id=:user_id';
  $query = $db->prepare($sql);
  $query->bindParam('user_id',$user_id,PDO::PARAM_STR);

  $delete = $query->execute();

实际上它正在大量工作,它会从数据库中删除用户行

但这里的问题是我没有写过':'绑定查询中的该列 我的意思是

这应该是错的

$query->bindParam('user_id',$user_id,PDO::PARAM_STR);

这应该是正确的

$query->bindParam(':user_id',$user_id,PDO::PARAM_STR);

但它不会抛出任何异常并且用户行被成功删除

对此有何解释?

1 个答案:

答案 0 :(得分:2)

这篇文章解释了为什么需要使用结肠。

Is the leading colon for parameter names passed to PDOStatement::bindParam() optional?

来自帖子:

  

不,因为文档没有提到这一点,我认为这是安全的   假设这种行为不是官方支持的,不应该   依靠。

     

然而,它确实发生了工作(至少在PHP 5.3.24中) -   在内部冒号将被添加到参数中,如果它丢失(参见   PHP 5.3.24源代码中的ext / pdo / pdo_stmt.c:363。