【问题标题】:Escaping ORDER BY clause using mysqli_real_escape_string() function [duplicate]使用mysqli_real_escape_string()函数转义ORDER BY子句[重复]
【发布时间】:2018-06-18 05:47:13
【问题描述】:

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

例如,url如下:

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 子句可以一次转义,还是每个值都必须单独转义?

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    最好的方法是使用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);
    }
    

    【讨论】:

    • 代码必须到处更改。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 2019-04-23
    • 1970-01-01
    • 2012-08-08
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多