【问题标题】:PHP PDO using bindParam first argument without colon [duplicate]PHP PDO 使用没有冒号的 bindParam 第一个参数
【发布时间】:2014-10-24 20:05:55
【问题描述】:

请检查一下

  $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);

但它没有抛出任何异常并且正在成功删除用户行

对此有何解释?

【问题讨论】:

  • 在查询中有 :user_id ..它应该是 $user_id $sql = 'DELETE FROM users WHERE user_id=$user_id';
  • mmmm 你对 bindparam 有什么想法吗?
  • 谢谢哥们,如果你把它放在单独的答案中被接受:)

标签: php mysql pdo


【解决方案1】:

这篇文章解释了为什么需要使用冒号。

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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2011-04-09
    • 2018-12-12
    相关资源
    最近更新 更多