:
在下面的示例中之前是什么意思id
?有必要吗?
$sth->bindValue(':id', $id, PDO::PARAM_INT);
我可以说:id
是变量吗?
如果PDO::PARAM_INT
没有必要,我为什么需要使用它?
:id
是准备好的查询的命名占位符。在您的代码中的其他地方有一个查询:
SELECT stuff FROM something WHERE id = :id
通过 PDO 的prepare
功能运行。
如果
PDO::PARAM_INT
没有必要,我为什么需要使用它?
安全/数据一致性。请参阅PDO::PARAM_INT 在 bindParam 中很重要吗?
在下面的示例中, : 在 id 之前是什么意思?有必要吗?
没什么特别的。这只是一种语法。就像 php 变量前面的 $ 符号。在查询中,有必要让解析器将占位符与任何其他查询部分区分开来。因此在 bindValue() 中使用完全相同的名称是有意义的
我可以说 :id 是一个变量吗?
几乎是的。顾名思义,它是一个变量,但为了不与 php 变量混淆,它被称为“占位符”。
如果 PDO::PARAM_INT 不是必需的,我为什么需要使用它?
它与安全完全无关。您可能只想使用此修饰符来告诉数据库您正在发送一个整数。说到mysql,这个数据库对数据类型非常宽容,几乎在任何地方你都可以省略类型修饰符——在这种情况下,数据将被绑定为字符串。您可能很少想显式设置它:仅当您在 LIMIT 子句中使用占位符或发送涉及数学的 bigint 值时。
在下面的示例中, 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,您可以定义数据类型的长度以增加安全性。