在 PHP 中防止 SQL 注入攻击的最佳方式是使用参数化查询。参数化查询使用预处理语句,其中查询中的变量值被传递为参数而不是将它们直接插入到 SQL 查询中。这样可以避免潜在的 SQL 注入攻击。
以下是一个示例代码,展示如何使用参数化查询来防止 SQL 注入攻击:
<?php // 通过 mysqli 连接到数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 使用参数化查询防止 SQL 注入攻击 $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); // 设置参数并执行查询 $username = "john"; $password = "123456"; $stmt->execute(); // 处理查询结果 $result = $stmt->get_result(); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "用户名: " . $row["username"]. " 密码: " . $row["password"]. "<br>"; } } else { echo "0 结果"; } // 关闭连接 $stmt->close(); $conn->close(); ?>
在上面的代码中,我们首先使用 mysqli 连接到数据库。然后,我们使用 prepare() 方法来准备一个参数化查询语句。这个查询语句使用两个占位符 (?) 来表示我们将传递的参数。接下来,我们使用 bind_param() 方法将我们要查询的用户名和密码传递给占位符。
然后,我们设置参数并执行查询。如果查询返回结果,我们使用 fetch_assoc() 方法从结果集中提取数据并进行处理。最后,我们关闭语句并关闭数据库连接。
请注意,在使用参数化查询时,我们不必担心特殊字符和转义字符的问题,因为参数化查询会自动处理这些问题。
评论