我正在尝试阻止Select语句中的SQL注入。当这仅仅是关于值(这里类似的部分)时,我使用"bind_param“,如下面的示例所示,该示例按预期工作。
但是,我对变量列名有问题,因为我不能为这个使用"bind_param“。
有人能告诉我如何防止变量列名($language)的SQL注入(当前代码正在工作)吗?
My:
$language = "some language";
$location = "some location";
// ...
$stmt = $conn->prepare("SELECT tID, " . $language . " FROM Main WHERE location LIKE ? ORDER BY sortOrder, " . $language);
$stmt->bind_param("s", $location);
$stmt->execute();
// ...发布于 2015-07-20 06:01:27
无论如何,您可以选择所有列,然后尝试在结果集中使用所选语言访问列名。如果语言不正确,您将得到一个可以处理的异常。
一个更好的解决方案是将数据库设计规范化,使语言在行中而不是列中。然后,您可以使用参数化查询,而不存在任何问题。
https://stackoverflow.com/questions/31509559
复制相似问题