Ошибка в плагине Wordpress после обновления до 3.9
После того, как я обновил свою установку Wordpress до 3.9, я продолжаю получать эти ошибки:
Warning: mysql_query(): Access denied for user 'www-data'@'localhost' (using password: NO) in /home/sites/wordpress/site/wp-content/plugins/crm/main.php on line 20
Warning: mysql_query(): A link to the server could not be established in /home/sites/wordpress/site/wp-content/plugins/crm/main.php on line 20
Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/sites/wordpress/site/wp-content/plugins/crm/main.php on line 21
Я не могу понять, что не так. Вот код, который работал до 3.9:
<?php
session_start();
/**
* Plugin Name: CRM
* Description:
* Version:
* Author:
*
*/
add_action( 'admin_menu', 'menu' );
function menu() {
add_menu_page( 'CRM', 'CRM', 3,'form', 'form' );
}
function form() {
global $wpdb,$current_user,$user_ID;
echo "<h3>CRM</h3>";
$count = mysql_query("SELECT COUNT(id) FROM user_form_data");
$nume2 = mysql_fetch_row($count);
$nume = $nume2[0];
Остальное я обрезал, так как это не похоже на ошибку:)
РЕШЕНИЕ:
Нашел это.
Ошибка была в обновлении 3.9.
http://make.wordpress.org/core/2014/04/07/mysql-in-wordpress-3-9/
"В WordPress 3.9 мы добавили дополнительный слой в WPDB, в результате чего он переключился на использование библиотеки mysqli PHP при использовании PHP 5.5 или выше.
Для разработчиков плагинов это означает, что вам больше не следует использовать PHP-функции mysql_*() - вместо этого вы можете использовать эквивалентные функции WPDB ".
4 ответа
Вы должны прочитать этот пост http://make.wordpress.org/core/2014/04/07/mysql-in-wordpress-3-9/
В WordPress 3.9 мы добавили дополнительный слой в WPDB, в результате чего он переключился на использование библиотеки mysqli PHP при использовании PHP 5.5 или выше.
Для разработчиков плагинов это означает, что вам больше не следует использовать PHP-функции mysql_*() - вместо этого вы можете использовать эквивалентные функции WPDB.
Измените это на wp_results
$count = mysql_query("SELECT COUNT(id) FROM user_form_data");
$nume2 = mysql_fetch_row($count);
в
$count = $wpdb->get_results("SELECT COUNT(id) FROM user_form_data",ARRAY_A);
$nume2 = $wpdb->num_rows; ====== it will return same as mysql_fetch_row
Try this hope this help
<?php
/**
* Plugin Name: CRM
* Description: any desc
* Author: ABS
*
*/
add_action( 'admin_menu', 'user_data_menu' );
function user_data_menu() {
add_menu_page( 'CRM', 'CRM', 3,'user_data_form', 'user_data_form' );
}
function user_data_form() {
@session_start();
global $wpdb,$current_user,$user_ID;
echo "<h3>CRM</h3>";
$count = mysql_query("SELECT COUNT(id) FROM user_form_data");
$nume2 = mysql_fetch_row($count);
$nume = $nume2[0];
if ( $limit < $nume && empty($_POST['searching']) && empty($_POST['filter_flag']) && empty($_POST['rowsselect']) ) {
$start = $_GET['start'];
$eu = ($start - 0);
$limit = 20;
$this4 = $eu + $limit;
$back = $eu - $limit;
$next = $eu + $limit;
}
} ?>
Похоже, что обновление изменило имя пользователя и пароль mysql. Так что проблема не в коде.
Проверьте файл wp-config.php, если эти настройки изменены и неверны