我应该为PDO准备的语句使用bindParam(),bindValue()或execute()
我读过这个问题(我应该使用bindValue()还是execute(array())来避免SQL注入?),并发现execute(array())和bindParam()在处理PDO和预处理语句时都会阻止SQL注入。
不过,我还记得在某处execute()会自动将每个变量视为一个字符串,无论它是一个整数。 我的问题肯定是除了字符串变量以外,这是一个安全问题?
例如,如果我通过准备好的查询来获取用户的id,那么通过execute执行的参数将被视为字符串而不是整数。
显然这个脚本没有用户输入的方法,并且只会支持用户输入,例如更新配置文件,文章等。
我正在学习PDO,所以我想完全理解如何编写安全的PDO查询(或更好的功能),以防止/防范SQL注入和其他安全漏洞。
谢谢
安全性方面,将参数发送到execute()方面没有任何问题。 所以,你的担心是多余的。 鉴于字符串被安全地处理,并且我们将所有的参数作为字符串发送,我们可以合理地断定所有参数都是安全处理的(请注意,我不会责怪你的问题,总是问得好,而不是抱歉,我只是简单地说) 。
将所有参数视为字符串唯一可能的问题是在数据库服务器端。 然而,大多数数据库服务器允许在SQL中宽松输入,意味着尽管以字符串形式发送,但任何数据文字都将被正确识别和处理。 只有少数边缘情况下不起作用。 以下是关于此事的我的PDO教程摘录:
但是,有时最好明确地设置数据类型。 可能的情况是:
BIGINT
或BOOLEAN
,需要绑定确切类型的操作数(注意,为了将BIGINT值与PDO :: PARAM_INT绑定,需要基于mysqlnd的安装)。 总而言之,如果您已经关闭仿真,则几乎可以一直使用execute()方法。
链接地址: http://www.djcxy.com/p/66711.html上一篇: Should I use bindParam(), bindValue(), or execute() for PDO prepared statements
下一篇: PDO Prepared Statement returns 0 rows, but query works fine