【问题标题】:Warning: mysql_connect(): Access denied警告:mysql_connect():访问被拒绝
【发布时间】:2013-09-17 21:55:13
【问题描述】:

我有这个 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”的访问被拒绝

'@'localhost'(使用密码:YES)在 C:\Users\Jacques\Dropbox\Jacques\Web\Code.php 在第 37 行不能 连接:用户“root”的访问被拒绝

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

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

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

数据库名称

密码

本地主机:3306

【问题讨论】:

  • 阅读fgets() 上的参考 - 你会看到换行符包含在返回的字符串中。要么trim() 他们,要么使用file() 将文件读入数组,并设置标志以丢弃换行符。

标签: php text-files


【解决方案1】:

你是这样检查的吗:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • pdo和mysqli_的主要区别是什么
    • mysqli_mysql_ 的扩展版本。你会发现它们非常相似。 PDO 只是数据库连接的接口。我非常喜欢它,因为它面向 OOP。除此之外没有太大区别。两者都能胜任。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2017-07-10
      • 1970-01-01
      • 2015-11-05
      • 2012-04-23
      相关资源
      最近更新 更多