出于安全目的,替换mysql\u real\u escape\u字符串
我使用的是一个更新到4.3时坏掉的。错误是出于安全目的,替换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字符串作为此解决方案。但我
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不是我的强项,但感谢您的帮助。我更明白一点。