2016-06-11 215 views

回答

1

:id是准备好的查询的命名占位符。在你的代码在其他地方,是沿着线查询:

SELECT stuff FROM something WHERE id = :id 
是获得通过PDO的 prepare功能运行

If PDO::PARAM_INT is not necessary, why would I need to use it?

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

0

What does : mean before id in the example below? Is it necessary?

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

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

指定占位符的形式必须与:id一样。如果您的指定占位符没有该表单,则会导致错误。

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

Can I say :id is a variable?

没有用,:id是你parameter-identifier

If PDO::PARAM_INT is not necessary, why would I need to use it?

声明预期的数据类型为一个很好的安全策略(不是你可以依靠这只是为了安全课程)。如果您使用PDOStatement::bindParam,则可以定义数据类型的长度以增加安全性。

0

What does : mean before id in the example below? Is it necessary?

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

Can I say :id is a variable?

非常多的是。通过meaming它是一个变量,但是为了不使php变量混淆,它被称为“占位符”。

If PDO::PARAM_INT is not necessary, why would I need to use it?

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

+1

如果您将一个字符串传递给声明为只接受整数的变量值与PDO :: PARAM_INT会发生什么?如果出现错误,你可以称之为一种更“安全”的做事方式吗?但是,你会有一个答案。你将如何证明自己?顺便说一句,我真的很喜欢你的个人资料图像?它让我想起某人。 ;)如果你投了我票(是的,我知道你有多爱我和我的答案),谢谢你,这意味着来自你的很多。 –