Что мешает PHP подключиться к моей базе данных MySQL? - PullRequest
1 голос
/ 27 января 2012

[Обновлено ниже]

У меня проблема с подключением к базе данных MySQL с использованием стека LAM Bitnami.Это код, который я использовал для подключения на сервере общего хостинга, где я изначально размещал базу данных:

DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'database');

if ($dbc = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)) { // Make the connnection.

    if (!mysql_select_db (DB_NAME)) { // If it can't select the database.

        // Handle the error.
        trigger_error("Could not select the database!\n<br />MySQL Error: " . mysql_error());

        exit();

    } // End of mysql_select_db IF.

} else { // If it couldn't connect to MySQL.

    trigger_error("Could not connect to MySQL!\n<br />MySQL Error: " . mysql_error());
    exit();

} // End of $dbc IF.

При запуске этого на моем сервере Bitnami я не получаю ответа (даже сообщения об ошибке).(PHP работает нормально.)

Затем я попытался

<?php
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

и получил

Could not connect: Access denied for user 'username'@'localhost' (using password: YES)

эта комбинация имени пользователя и пароля определенно существует и (насколько я могурасскажите) имеет доступ к рассматриваемой базе данных.Мне интересно, что я делаю неправильно и почему оригинальный сценарий не выдает ошибку (или соединение).

Обновление:

Я последовал предложению Майкла ниже, исмог подключиться.Я хотел воспроизвести проблему, поэтому я удалил этого пользователя, затем создал пользователя testuser через

CREATE USER 'testuser'@'%' IDENTIFIED BY  '***';

GRANT SELECT , 
INSERT ,

UPDATE ,
DELETE ,
FILE ON * . * TO  'testuser'@'%' IDENTIFIED BY  '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

Затем, следуя совету Майкла, я выполнил

GRANT ALL PRIVILEGES ON test . * TO testuser@localhost IDENTIFIED BY  'password'

, но снова получаю

Could not connect: Access denied for user 'testuser'@'localhost' (using password: YES)

(Это не работает, использую ли я '%' или 'localhost')

Так выглядят привилегии для testuser в phpmyadmin

Database    Privileges  Grant   Table-specific privileges
test     ALL PRIVILEGES No  No   Edit Privileges

Ответы [ 4 ]

2 голосов
/ 27 января 2012

Полученное сообщение об ошибке ясно: пользователь, к которому вы подключаетесь, не имеет доступа через используемый вами пароль. Вам необходимо предоставить соответствующие привилегии:

GRANT ALL PRIVILEGES on dbname.* to username@localhost IDENTIFIED BY 'thepassword';
0 голосов
/ 27 января 2012

Попробуйте

имя пользователя: 'root'

пароль: '' (т.е. без пароля)

0 голосов
/ 27 января 2012

Две вещи:

  1. Убедитесь, что вы используете то, каким должен быть путь хоста MySQL вашего провайдера общего хостинга. Я знаю для GoDaddy, это что-то вроде DBNAME.db.123456.hostedresource.com. Я уверен, что для вас все будет иначе. localhost, вероятно, не так.
  2. Убедитесь, что любой php-файл, который вы используете для своего соединения (где вы вводите свои учетные данные БД), находится вне веб-корня. Это большой риск для безопасности, если вы поместите этот файл в корневой веб-каталог или ниже. Если по какой-либо причине произойдет сбой PHP на сервере, файл будет передан в браузер, чтобы его могли увидеть все.
0 голосов
/ 27 января 2012

Попробуйте, если у вас нет пароля:

$link = mysql_connect('localhost', 'username');
...