什么":"在PHP PDO中使用bindValue()时的意思是什么?

时间:2016-06-11 01:12:27

标签: php pdo bindvalue

以下示例中:之前id的含义是什么?有必要吗?

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

我可以说:id是变量吗?

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

3 个答案:

答案 0 :(得分:1)

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

SELECT stuff FROM something WHERE id = :id

通过PDO的prepare函数运行。

  

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

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

答案 1 :(得分:0)

  

以下示例中的{strong> 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,则可以定义数据类型的长度以增加安全性。

答案 2 :(得分:0)

  

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

没什么特别的。这只是一种语法。就像php变量前面的$符号一样。在查询中,必须让解析器区分占位符和任何其他查询部分。因此在bindValue()

中使用完全相同的名称是有意义的
  

我可以说:id是变量吗?

非常好。通过命名它是一个变量,但为了使它不与php变量混淆,它被称为“占位符”。

  

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

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