Вчера я столкнулся со странной проблемой. У меня есть сервер с Debian с установленными PHP 4.4.4-8 и mysql 5.5.9. Этот сервер обслуживает несколько веб-сайтов. По какой-то причине случайно я получаю эту ошибку «Доступ запрещен для пользователя« www-data »@« localhost »(с использованием пароля: НЕТ)», когда я пытаюсь загрузить веб-страницу. Если я нажимаю обновление, страница загружается нормально, но есть несколько кликов, это сообщение появляется снова. Имя пользователя, которое эта страница использует для подключения к серверу mysql, не является www-данными.
Кто-нибудь сталкивался с подобной проблемой?
www-data
– это пользователь Debian, который запускает apache и php. Если вы попытаетесь выполнить запрос, если у вас нет правильного подключения, php / mysql попытается создать соединение с помощью <unix-user>@localhost
без пароля. Здесь вызывается www-data@localhost (using password:NO)
.
Наиболее вероятная причина, по которой это началось сейчас (хотя она работает нормально в течение двух лет) заключается в том, что ваша загрузка db увеличилась до такой степени, что некоторые соединения не могут быть успешными (вероятно, из-за max_connections или max_user_connections, хотя это также может быть результатом других ограничений, таких как память, потоки и т. д.). Когда это произойдет, ваш вызов mysql_connect
выдает сообщение об ошибке и возвращает FALSE
. Если вы не обнаружите эту ошибку, ваш следующий вызов mysql (возможно, mysql_query или mysql_select_db) попытается подключиться к www-data @ localhost – таким образом, вы столкнетесь с проблемой, которую видите.
Я предлагаю включить отчет об ошибках и отображение ошибок (как было предложено @DarkMantis):
ini_set('error_reporting', E_ALL|E_STRICT); ini_set('display_errors', 1);
Кроме того, убедитесь, что вашему вызову mysql_connect не предшествует знак @
; и не забудьте проверить возвращаемое значение. Он должен выглядеть примерно так:
$cxn = mysql_connect('localhost','yourusername','yourpassword'); if( $cxn === FALSE ) { die('mysql connection error: '.mysql_error()); }
Похоже, что запрос, вызывающий ошибку, возникает, когда вызывается что-то конкретное. Это может означать, что при вызове запроса вы не подключены к базе данных с правильным именем пользователя / паролем.
Постарайтесь убедиться, что вы определенно связаны, используете or die(mysql_error());
в конце всех ваших переменных запроса для их отладки.
Кроме того, используйте следующие две строки вверху вашего php-файла:
ini_set('error_reporting', E_ALL); ini_set('display_errors', 1);
Это покажет вам любые небольшие ошибки php, которые могут возникнуть в вашем классе / файле, которые вы, возможно, раньше не встречали.
Если у вас все еще есть проблемы после этого, отправьте свой PHP-код, и я посмотрю на него напрямую.
Благодаря!
я столкнулся с той же проблемой. Проблема была в моем config.php! Я просто изменил $ dbserver с «127.0.0.1» -> «localhost». Теперь соединение снова работает!
Использовать пароль «НЕТ»
(MySQLi Object-Oriented) <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?>
Деактивация безопасного режима исправила его для меня:
Notice: mysql_connect(): SQL safe mode in effect - ignoring host/user/password information in /var/www/html/test.php on line 4
Для решения этой проблемы. Мне пришлось изменить сценарий подключения.
(MySQLi Object-Oriented) <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?>