警告:mysql_connect():访问被拒绝

时间:2013-09-13 09:08:04

标签: php text-files

我有这个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)in   第37行的C:\ Users \ Jacques \ Dropbox \ Jacques \ Web \ Code.php无法   connect:用户'root

的访问被拒绝      

'@'localhost'(使用密码:YES)

我该如何解决这个问题。我试过替换所有字符返回和空格但它没有帮助

这是我的文本文件中的文字

  

DBNAME

     

root

     

密码

     

本地主机:3306

3 个答案:

答案 0 :(得分:1)

你这样检查过:

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

答案 1 :(得分: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

另一个旁注

从PHP 5.5.0开始,不推荐使用mysql_函数。您应该使用mysqli_PDO代替。我自己更喜欢PDO。

答案 2 :(得分:1)

使用trim()

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

来自文档:

“此函数返回一个字符串,其中从str的开头和结尾剥去了空格。没有第二个参数,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