【发布时间】:2014-09-19 06:20:30
【问题描述】:
原来我用mysql_connect和mysql_query做事。然后我了解了SQL注入,所以我正在尝试学习如何使用准备好的语句。我了解 PDO 类的准备和执行功能如何有助于防止 SQL 注入。
是否仅当用户输入存储到数据库中时才需要准备好的语句?仍然使用mysql_num_rows 可以吗,因为我并没有真正冒着使用此功能被黑客入侵的风险?还是使用准备好的语句来执行此操作更安全?对于涉及使用 MySQL 的所有内容,我应该使用准备好的语句吗?为什么?
【问题讨论】:
-
如果你能保证你的代码库中没有任何部分使用过用户生成的查询数据,那么就没有意义了。如果您甚至有一个查询,那么使用两种不同的查询方式是没有意义的。首先使用准备好的查询以确保安全性,其次才是一致性。
-
你好像有点困惑。首先请don't use
mysql_*;mysql_*函数已过时、deprecated 且不安全。请改用MySQLi或PDO。其次,mysql_num_rows与准备好的语句无关,也不是 PDO 功能。在运行查询之前准备语句,而不是在要计算行数时准备语句。
标签: php security prepared-statement sql-injection