连接():访问被拒绝

我有这个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);
};

和这个代码的作品。 但是当它将我的代码返回到我的会话中时,我发现它在实际变量中添加了额外的换行符,所以当我连接时的结果是

警告:mysql_connect():拒绝用户root的访问

第37行的C: Users Jacques Dropbox Jacques Web Code.php中的'@'localhost'(使用密码:YES)无法连接:拒绝用户root的访问

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

我怎样才能解决这个问题。 我试图更换所有的字符返回和空格,但它没有帮助

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

DBNAME

密码

本地主机:3306


如果你确定字符串的每一端都有空格,你可以使用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。


你是否这样检查:

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

使用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

    链接地址: http://www.djcxy.com/p/11889.html

    上一篇: connect(): Access denied

    下一篇: MySQL: Grant **all** privileges on database