После обновления 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
])
);
не проще ли этот статпресс на какое-нить другое говно заменить?
Да мб и можно, но мне лень выбирать 🙂