Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
出于安全目的,替换mysql\u real\u escape\u字符串_Mysql - Fatal编程技术网

出于安全目的,替换mysql\u real\u escape\u字符串

出于安全目的,替换mysql\u real\u escape\u字符串,mysql,Mysql,我使用的是一个更新到4.3时坏掉的。错误是 mysql_real_escape_string(): Access denied for user 我发现这个错误是因为mysql_real_escape_字符串是从mysql内部调用的,需要在执行之前登录。解决方案是在mysql\u real\u escape\u字符串之前包含一个mysql\u connect,从而解决了这个问题。但从许多评论来看,出于各种安全原因,不应使用mysql\u real\u escape\u字符串作为此解决方案。但我

我使用的是一个更新到4.3时坏掉的。错误是

mysql_real_escape_string(): Access denied for user
我发现这个错误是因为mysql_real_escape_字符串是从mysql内部调用的,需要在执行之前登录。解决方案是在mysql\u real\u escape\u字符串之前包含一个mysql\u connect,从而解决了这个问题。但从许多评论来看,出于各种安全原因,不应使用mysql\u real\u escape\u字符串作为此解决方案。但我不确定如何将代码更改为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\u real\u escape\u字符串,或者更好的方法来实现这一点?我不确定是否类似,但我不知道如何实现答案。

如果正确使用mysql\u real\u escape\u字符串是非常安全的,尽管现在已经不推荐使用。有很多复杂的技巧可以打破它。这里的问题是,尽管$wpdb对象与mysql\u real\u escape\u字符串使用的对象不同,但我怀疑您的连接。连接对于正确转义数据非常重要,否则您可以使用mysql_escape_string,它不需要连接,但不太安全。这个问题让它看起来很糟糕,但可能是因为它是PDO,我认为wordpress不是?向函数中添加一个包含所有数据的mysql_connect足够安全吗?问题是它意味着与查询使用的链接相同,而不仅仅是一个随机链接。Mysql_real_escape_string会转义特定于该连接的内容,例如所使用的字符集,因此使用不同的链接可能会导致错误转义。如果您使用的是pdo,那么您可以传递参数,而不必在转义字符串中连接。mySQL不是我的强项,但感谢您的帮助。我更明白一点。