Warning: mysql_real_escape_string(): Access denied for user »@’localhost’

После обновления PHP на каждой странице моего блога стало появляться:

Warning: mysql_real_escape_string(): Access denied for user ''@'localhost' in /wp-content/plugins/statpress/statpress.php on line 1786

Я подумал, что это временная проблема в модуле StatPress и отключил его с надеждой, что разработчики в ближайшее время исправят багу. Прошло несколько недель, решил обновить модуль и проверить снова — ничего не поменялась, ошибка по-прежнему осталась. Решил поковыряться сам.

После того, как я увидел код StatPress’а, я очень сильно разочаровался как в модуле, так и в самом вордпрессе. Эти чудики (разработчики StatPress) умудрились использовать mysql_real_escape_string даже тогда, когда подключение к базе не установлено. А оно, конечно же, не установлено с использованием данной библиотеки, так как вордпресс давным давно съехал с mysql_.

Мало того, разработчики StatPress до сих пор живут в каменном веке и не используют биндинг параметров при формировании запросов в БД, а пишут как в старые добрые времена:

$insert = "INSERT INTO " . $table_name .
            " (date, time, ip, urlrequested, agent, referrer, search,nation,os,browser,searchengine,spider,feed,user,timestamp) " .
            "VALUES ('$vdate','$vtime','$ipAddress','$urlRequested','".addslashes(strip_tags($userAgent))."','$referrer','" .
            addslashes(strip_tags($search_phrase))."','".$countrylang."','$os','$browser','$searchengine','$spider','$feed','$userdata->user_login','$timestamp')";
		$results = $wpdb->query( $insert );

Собственно фикс, чтобы привести этот модуль (StatPress) в рабочее состояние:
1. Удаляем в файле /wp-content/plugins/statpress/statpress.php строки

$urlRequested=mysql_real_escape_string($urlRequested);
...
...
$referrer=mysql_real_escape_string($referrer);
...
...
$userAgent=mysql_real_escape_string($userAgent);

2. Заменяем строки

$insert = "INSERT INTO " . $table_name .
" (date, time, ip, urlrequested, agent, referrer, search,nation,os,browser,searchengine,spider,feed,user,timestamp) " .
"VALUES ('$vdate','$vtime','$ipAddress','$urlRequested','".addslashes(strip_tags($userAgent))."','$referrer','" .
addslashes(strip_tags($search_phrase))."','".$countrylang."','$os','$browser','$searchengine','$spider','$feed','$userdata->user_login','$timestamp')";
$results = $wpdb->query( $insert );

на

$insert = "INSERT INTO " . $table_name .
" (date, time, ip, urlrequested, agent, referrer, search, nation, os, browser, searchengine, spider, feed, user, timestamp) " .
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)";
$results = $wpdb->query(.
    $wpdb->prepare($insert, [
	$vdate,
	$vtime,
	$ipAddress,
	$urlRequested,
	$userAgent,
	$referrer,
	$search_phrase,
	$countrylang,
	$os,
	$browser,
	$searchengine,
	$spider,
	$feed,
	$userdata->user_login,
	$timestamp
    ])
);
  1. не проще ли этот статпресс на какое-нить другое говно заменить? :mrgreen:

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>