出于安全目的替换mysql_real_escape_string

时间:2015-09-07 12:12:07

标签: mysql

我使用的是WordPress Plugin,更新到4.3。错误是

mysql_real_escape_string(): Access denied for user

我发现错误是因为mysql_real_escape_string是从MySQL内部调用的,需要在执行前登录。解决方案是在mysql_real_escape_string之前包含一个mysql_connect,它解决了这个问题。但是从许多评论看来,mysql_real_escape_string似乎不应该出于各种安全原因使用此解决方案。但我不知道如何将代码更改为PDO :: quote等,因为我不确定最新情况。我想要更改的查询是

function custom_permalinks_request($query) {
    global $wpdb;
    global $_CPRegisteredURL;

    // First, search for a matching custom permalink, and if found, generate the corresponding
    // original URL

    $originalUrl = NULL;

    // Get request URI, strip parameters and s
    $url = parse_url(get_bloginfo('url'));
    $url = isset($url['path']) ? $url['path'] : '';
    $request = ltrim(substr($_SERVER['REQUEST_URI'], strlen($url)),'/');
    $request = (($pos=strpos($request, '?')) ? substr($request, 0, $pos) : $request);
    $request_noslash = preg_replace('@/+@','/', trim($request, '/'));
    if ( !$request ) return $query;
    $sql = "SELECT $wpdb->posts.ID, $wpdb->postmeta.meta_value, $wpdb->posts.post_type FROM $wpdb->posts  ".
                "LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) WHERE ".
                "  meta_key = 'custom_permalink' AND ".
                "  meta_value != '' AND ".
                "  ( LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash)."'), LENGTH(meta_value)) OR ".
                "    LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash."/")."'), LENGTH(meta_value)) ) ".
                "ORDER BY LENGTH(meta_value) DESC LIMIT 1";
    $posts = $wpdb->get_results($sql);
return $query;
}

有没有一种简单的方法来替换mysql_real_escape_string或更好的方法来做到这一点?我不确定this question是否相似,但我不知道如何实现答案。

0 个答案:

没有答案