Как мне подключиться к mysql из php? - PullRequest
1 голос
/ 05 апреля 2010

Я работаю над примерами из книги по разработке php / mysql. Я работаю в среде Linux / Apache.

Я настроил базу данных и пользователя. Я пытаюсь соединиться с этой строкой кода:

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

Я получаю эту ошибку:

Предупреждение: mysql_connect () [function.mysql-connect]: доступ пользователю "www-data" @ 'localhost' отказано (используя пароль: ДА) в /var/www/hosts/dj/connect.php на линии 3 невозможно подключиться к базе данных: пользователю отказано в доступе 'www-data' @ 'localhost' (используя пароль: ДА)

Я могу только догадываться, что здесь происходит: Я думаю, что www-data - это имя пользователя apache. При подключении к базе данных учетные данные, передаваемые в mysql, принадлежат не моему пользователю базы данных, а учетным данным apache. Это то, что здесь происходит?

Как передать учетные данные, которые я определил для моего пользователя?

редактировать: Кстати, у меня есть учетные данные в переменных $ db_hostname, $ db_username, $ db_password.

они передаются другим файлом с использованием require_once. Если этот файл не может быть найден, я получаю сообщение об ошибке. Итак, я знаю, что мое имя пользователя и пароль используются моим сценарием.

Оба моих сценария можно увидеть здесь: http://pastebin.com/MUneLEib

#

Решено:

Спасибо, ребята.

Некоторые из вас отметили, что я закодировал небрежно.

Также меня особенно порадовал ответ Нео: он рассказал мне, почему используется имя пользователя владельца процесса apache.

:)

Ответы [ 10 ]

3 голосов
/ 05 апреля 2010

В вашем login.php вы используете переменную $database_username, но в вашей функции подключения вы используете $db_username. Попробуйте сопоставить их.

3 голосов
/ 05 апреля 2010

Я только что посмотрел на ваш код! Переменная с именем пользователя: $ database_username, но вы используете $ db_username .. Измените свой код на:

$db_server = mysql_connect($db_hostname, $database_username, $db_password);

или вы можете изменить строку с именем пользователя: $ db_username = '[ваш пользователь mysql]'; // или имя пользователя, которое вы создали

Когда вы ничего не передаете, это будет предполагаться пользователем mysql, но он не получит пароль, поэтому, если вы не определили $ db_password, он скажет: (используя пароль: НЕТ)

вы устанавливаете $ database_username вместе со своим пользователем, но вы передаете $ db_username, который не задан, поэтому пользователь по умолчанию использует имя пользователя linux, когда ничего не передается с паролем для пользователя mysql! Так как нет пользователя mysql с таким паролем или привилегиями или даже с этим именем, вам не предоставлен доступ!

Этот пользователь - www-data, который, как вы уже догадались, назначен пользователю apache, назначенному для запросов на стороне клиента!

1 голос
/ 05 апреля 2010

Все эти другие ответы настолько самонадеянны, как будто вы не знаете, что $ db_username означает имя пользователя базы данных и то же самое для пароля.

Ошибка говорит о том, что вы указали имя пользователя и пароль.Вы просто указали неправильные.Вам нужно использовать имя пользователя и пароль MySQL, а НЕ комбинацию имени пользователя и пароля системы, поэтому нет, это не будет www-data.Это может быть пароль root и некоторый пароль, но, опять же, эти учетные данные указываются в MySQL и не (обязательно) совпадают с системными пользователями и паролями.

В вашей установке MySQL должен быть пользователь root со значением по умолчаниюпароль (который вы должны быстро изменить).Есть несколько вариантов: вы можете добавить пользователя через командную строку MySQL или использовать интерфейс, такой как cPanel или Webmin , если у вашего провайдера есть что-то подобное;Я использовал оба из них, и они оба имеют простые интерфейсы для добавления новых пользователей MySQL и назначения им привилегий.

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

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

1 голос
/ 05 апреля 2010
<?php
$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
?>
1 голос
/ 05 апреля 2010

Имя пользователя входит в $db_username, а пароль - в $db_password.

0 голосов
/ 19 ноября 2016

Прекратить использование mysql_connect()!

Вам следует не использовать эту или другие связанные функции, связанные с этим расширением.

Это устарело и удалено в PHP 7.0.0 и более поздних версиях.Альтернативой является использование PDO или MySQLi .Ниже приведен пример сценария подключения к MySQL с использованием PDO:

<?php

  /* Connect to a MySQL database using driver invocation */

  /* DSN options:
     http://php.net/manual/en/ref.pdo-mysql.connection.php

     Error handling options:
     http://php.net/manual/en/pdo.error-handling.php

     Learn how to secure against SQL injection attacks:
     http://php.net/manual/en/pdo.prepared-statements.php
  */

  $user = 'myusername';
  $pass = 'mypassword';
  $host = 'localhost';
  $mydb = 'mydatabase';

  $dsn = "mysql:dbname=$mydb;host=$host"; 

  try {
      $dbh = new PDO($dsn, $user, $pass);
  } catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
  }

?>
0 голосов
/ 26 марта 2016

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

* 1004 локальный *

как имя хоста &

корень

как имя пользователя & в xampp пароль отсутствует, поэтому будет

$password = "";, затем $dblink = new mysqli($hostname, $dbuser, $password, $dbname);

чтобы вы могли установить свои переменные следующим образом

<?php

    $hostname = "localhost";
    $dbuser = "root";
    $password = ""; // means there is no password to the database
    $dbname = "test"

?>

Вывод:

если вы получите это как сообщение -

Предупреждение: mysql_connect () [function.mysql-connect]: доступ запрещен для пользователя 'www-data' @ 'localhost' (используя пароль: YES) в /var/www/hosts/dj/connect.php on line 3 невозможно подключиться к базе данных: доступ запрещен для пользователя 'www-data' @ 'localhost' (с использованием пароля: ДА)

Это означает, что вы ввели неверный пароль или пароль отсутствует.

0 голосов
/ 05 апреля 2010

Данная ошибка может означать, что привилегия не предоставлена ​​или, возможно, пароль неверный. Убедитесь, что пользователь создан и ему предоставлен доступ, или просто введите его, чтобы убедиться, что он разрешен для доступа на сервере MySQL.

$ mysql -u root -p
password:

(бла-бла-бла с сервера)

GRANT ALL PRIVILEGES ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';

Если все привилегии слишком велики, рассмотрите возможность предоставления только основных необходимых разрешений:

GRANT SELECT,UPDATE,DELETE ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';

Кстати, ответ сервера на этот оператор в случае успеха: Запрос в порядке, затронуто 0 строк .

0 голосов
/ 05 апреля 2010

Я бы порекомендовал вам пройти учебник по MySQL и PHP, прежде чем пытаться идти дальше - просто чтобы вы поняли, как все это работает.

Попробуйте это: http://www.tizag.com/mysqlTutorial/mysqlconnection.php

Также документация вашего друга: http://php.net/manual/en/function.mysql-connect.php

0 голосов
/ 05 апреля 2010

Убедитесь, что вы на самом деле присваиваете этим переменным имя пользователя и пароль для входа в базу данных, прежде чем пытаться подключиться. Например, перед строкой с mysql_connect ():

$db_username = 'myuser';
$db_password = 'mypass123';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...