我使用的是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是否相似,但我不知道如何实现答案。