Предупреждение: mysql_connect(): доступ запрещен

У меня есть эта функция PHP, чтобы прочитать мой dbinfo из текстового файла на моем компьютере:

function loaddb(){
    $fh = fopen('dta.txt','r');
        $line = fgets($fh);
        $_SESSION['dbname']=$line;

        $line = fgets($fh);
        $_SESSION['dbuser']=$line;

        $line = fgets($fh);
        $_SESSION['dbpass']=$line;

        $line = fgets($fh);
        $_SESSION['server']=$line;                                  
    fclose($fh);
};

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

Предупреждение: mysql_connect(): доступ запрещен для пользователя root

'@' localhost '(используя пароль: YES) в C:\Users\Jacques\Dropbox\Jacques\Web\Code.php в строке 37 Не удалось подключиться: доступ запрещен для пользователя' root

'@' localhost '(используя пароль: ДА)

Как я могу это исправить. я пытался заменить все символы возврата и пробелы, но это не помогает

это текст в моем текстовом файле

имя_бд

корень

пароль

локальный:3306

3 ответа

Решение

Если вы уверены, что пробелы находятся на каждом конце строки, вы можете использовать trim()

$_SESSION['dbname']= trim($line);

Когда вы имеете дело со строкой, которая может иметь несколько пробелов, вы можете решить это с помощью простого регулярного выражения:

$regex = '/(\s)\s+/'; // Select a whitespace and following whitespaces
$str = preg_replace($regex, '$1', $str); // Replace with the first whitespace

Важная информация

Сохранение учетных данных вашей базы данных в текстовом файле в вашей папке www - очень плохая практика. Если кто-то найдет имя файла, он может прочитать ваши учетные данные.

Однако PHP-код анализируется перед отправкой клиенту, поэтому клиент не может получить доступ к учетным данным (если вы их не отобразите).

config.php

<?php
define('DB_HOST', 'localhost:3306');
define('DB_NAME', 'dbname');
define('DB_USER', 'root');
define('DB_PASS', 'password');

Затем, когда вам нужны ваши учетные данные базы данных:

require 'config.php';
// connect here

Еще один знак

Начиная с PHP 5.5.0, функции mysql_ устарели. Вместо этого вы должны использовать mysqli_ или PDO. Я предпочитаю сам PDO.

Вы проверили так:

$_SESSION['dbname'] = trim($line);

Использование trim():

$_SESSION['dbname']= trim($line);

Из документов:

"Эта функция возвращает строку с пробелами, удаленными из начала и конца строки. Без второго параметра trim () удалит эти символы:"

  • "" (ASCII 32 (0x20)), обычное пространство.
  • "\ t" (ASCII 9 (0x09)), вкладка.
  • "\ n" (ASCII 10 (0x0A)), новая строка (перевод строки).
  • "\ r" (ASCII 13 (0x0D)), возврат каретки.
  • "\ 0" (ASCII 0 (0x00)), NUL-байт.
  • "\ x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

http://php.net/manual/en/function.trim.php

Другие вопросы по тегам