使用mysqli_real_escape_string()函数转义ORDER BY子句

时间:2018-01-09 08:24:04

标签: php mysql sql

我根据用户选择在SQL查询的ORDER BY子句中使用不同的值。如何使用mysqli_real_escape_string()函数转义此选定值?

例如,网址如下:

localhost/person/person_listing.php?sort_by=date_of_birth

基于此,我正在使用:

if (isset($_GET['sort_by'])) {
    $sort_by = trim($_GET['sort_by']);
    if (!empty($sort_by)) {
        $order_by_sql = " ORDER BY $sort_by";
    }
}

问题是,逃避这种类型的SQL附加组件的最佳方法是什么?整个ORDER BY子句可以一次转义,还是每个值都必须单独转义?

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用prepared statement。您的代码看起来如下:(grabbed from here

基本上,只要有想要传递的变量,就可以添加问号。然后使用mysqli_stmt_bind_param函数传递它。 ss这意味着您要传递2个字符串。

if ($stmt = mysqli_prepare($link, "SELECT * FROM users WHERE Name=? ORDER BY ?")) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "ss", $name, $sort_by);
}