1

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

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

我可以说:id是变量吗?

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

4

3 回答 3

1

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

SELECT stuff FROM something WHERE id = :id

通过 PDO 的prepare功能运行。

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

安全/数据一致性。请参阅PDO::PARAM_INT 在 bindParam 中很重要吗?

于 2016-06-11T02:14:24.343 回答
1

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

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

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

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

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

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

于 2016-06-11T06:28:55.683 回答
0

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

于 2016-06-11T03:16:59.467 回答