SQl注入的危害非常的大,下面这个示例就是一个典型的注入点,代码未对用户所提交的数据进行合法性检查。
$unsafe_variable = $_POST['user_input']; mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
用户可通过提交类似 value'); DROP TABLE table;--
这样的代码,运行时将执行下面的非法代码
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
对数据安全性以及有效性破坏非常的大,在开发过程中一定要对用户提交信息进行合法性检查,针对PDO和MySQLi两种不同的数据库连接方式有如下两种处理办法。
1.PDO连接(适用于多种数据库)
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array('name' => $name)); foreach ($stmt as $row) { // do something with $row }
2.MySQLi连接(仅适用于MySQL)
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }