以下示例中:
之前id
的含义是什么?有必要吗?
$sth->bindValue(':id', $id, PDO::PARAM_INT);
我可以说:id
是变量吗?
如果不需要PDO::PARAM_INT
,我为什么需要使用它?
答案 0 :(得分:1)
:id
是准备好的查询的命名占位符。代码中的其他地方有一个查询:
SELECT stuff FROM something WHERE id = :id
通过PDO的prepare
函数运行。
如果不需要
PDO::PARAM_INT
,我为什么需要使用它?
答案 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值时。