【问题标题】:What does ":" mean when using bindValue() in PHP PDO?在 PHP PDO 中使用 bindValue() 时“:”是什么意思?
【发布时间】:2016-10-12 01:23:35
【问题描述】:

在下面的示例中,id 之前的: 是什么意思?有必要吗?

$sth->bindValue(':id', $id, PDO::PARAM_INT);

我可以说:id 是一个变量吗?

如果PDO::PARAM_INT 不是必需的,我为什么需要使用它?

【问题讨论】:

标签: php pdo bindvalue


【解决方案1】:

:id 是准备好的查询的命名占位符。在您的代码中的其他地方有一个查询:

SELECT stuff FROM something WHERE id = :id

通过 PDO 的 prepare 函数运行。

如果PDO::PARAM_INT 不是必需的,我为什么需要使用它?

安全/数据一致性。见PDO::PARAM_INT is important in bindParam?

【讨论】:

    【解决方案2】:

    在下面的例子中 : 在 id 之前是什么意思?有必要吗?

    没什么特别的。这只是一种语法。就像 php 变量前面的 $ 符号。在查询中,有必要让解析器将占位符与任何其他查询部分区分开来。因此在 bindValue() 中使用完全相同的名称是有意义的

    我可以说 :id 是一个变量吗?

    几乎是的。顾名思义,它是一个变量,但为了不与 php 变量混淆,它被称为“占位符”。

    如果 PDO::PARAM_INT 不是必需的,我为什么需要使用它?

    这与安全性完全无关。您可能只想使用此修饰符来告诉数据库您正在发送一个整数。说到mysql,这个数据库对数据类型非常宽容,几乎在任何地方你都可以省略类型修饰符——在这种情况下,数据将被绑定为字符串。您可能很少想显式设置它:仅当您在 LIMIT 子句中使用占位符或发送涉及数学的 bigint 值时。

    【讨论】:

    • 您能否告诉我们,如果您将一个字符串传递给一个声明为仅接受 PDO::PARAM_INT 整数值的变量,将会发生什么?如果出现错误,您可以称其为更“安全”的做事方式,对吗?但话又说回来,你会有一个答案。你将如何证明自己?顺便说一句,我真的很喜欢你的个人资料图片吗?它让我想起了一个人。 ;) 如果你对我投了反对票(是的,我知道你有多爱我和我的回答)谢谢你,这对你来说意义重大。
    【解决方案3】:

    在下面的示例中,id 之前的: 是什么意思?有必要吗?

    $sth->bindValue(':id', $id, PDO::PARAM_INT);
    

    是的,这是必要的。在PDOStatement::bindValue 中定义:id 是参数标识符的命名占位符。如果您使用问号占位符,您的参数标识符将是 1

    命名占位符的形式必须类似于:id。如果您的命名占位符没有该表单,则会导致错误。

    • 致命错误:...在WHERE id = ::id 附近使用正确的语法

    我可以说 :id 是一个变量吗?

    不,:id 是你的 parameter-identifier

    如果 PDO::PARAM_INT 不是必需的,我为什么需要使用它?

    声明预期的数据类型是一种很好的安全策略(当然,您不能仅仅为了安全而依赖它)。如果您使用PDOStatement::bindParam,您可以定义数据类型的长度以增加安全性。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2014-06-12
      • 2015-04-29
      • 2012-11-15
      • 2011-01-02
      • 1970-01-01
      • 2018-11-29
      • 2016-12-08
      • 2011-08-12
      相关资源
      最近更新 更多