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