Предупреждение: 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 Не удалось connect: доступ запрещен для пользователя root
'@' localhost '(с использованием пароля: YES)
как я могу это исправить. я попытался заменить все возвращаемые символы и пробелы, но он не помогает
это текст в текстовом файле
имя_бд
root
пароль
локальный: 3306
Ответы
Ответ 1
Если вы уверены, что пробелы на каждом конце строки, вы можете использовать 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
Другой оповещатель
Функции mysql_ устарели от PHP 5.5.0. Вы должны использовать mysqli_ или PDO. Я предпочитаю PDO сам.
Ответ 2
Вы проверили следующее:
$_SESSION['dbname'] = trim($line);
Ответ 3
Используйте 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