保护此查询免受 SQL 注入(inject)的最佳方法是什么? 这个例子只是一个例子,我在互联网上读过一些文章,但无法理解参数化查询。任何有用文章的链接都会获得投票,但我认为看到这个例子对我很有帮助。
$id = $_GET["id"];
$connection = odbc_connect("Driver={SQL Server};Server=SERVERNAME;Database=DATABASE-NAME;", "USERNAME", "PASSWORD");
$query = "SELECT id firstname secondname from user where id = $id";
$result = odbc_exec($connection, $query);
while ($data[] = odbc_fetch_array($result));
odbc_close($connection);
谢谢
编辑:我没有说得很明显,但我使用的是 SQL Server 而不是 mysql。 这只是一个例子,它并不总是我正在搜索的数字。 如果答案使用参数化查询(正如许多人建议的那样),并且对于所有查询都是相同的,而不是针对不同类型的用户输入进行不同类型的验证,那就太好了。
最佳答案
我认为PDO objects是最好的。
简而言之,以下是如何使用它们。
$databaseConnection = new PDO('mysql:host='. $host .';dbname=' . $databaseName, $username, $password);
$sqlCommand = 'SELECT foo FROM bar WHERE baz=:baz_value;';
$parameters = array(
':baz_value' => 'some value'
);
$preparedStatement = $databaseConnection->prepare($sqlCommand);
$preparedStatement->execute($parameters);
while($row = $preparedStatement->fetch(PDO::FETCH_ASSOC))
{
echo $row['foo'] . '<br />';
}
您为 SELECT 条件输入的值将替换为以冒号开头的参数(例如 :field_value
)。然后,为参数分配一个数组中的值,并单独传递。
我认为这是处理 SQL 查询的更好方法。
参数与查询分开发送到数据库,并防止 SQL 注入(inject)。
关于php - 如何保护 ODBC 查询免遭 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310504/