Предупреждение: 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.
Использование 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)), вертикальная табуляция.