php - PDO 连接到 MySQL 数据库被拒绝

标签 php mysql database pdo

我正在尝试连接到我的 NearlyFreeSpeech MySQL 数据库。我可以通过 PHPMyAdmin 登录,但不能通过 PDO 登录。我正在使用这段代码

 $dbconn = new PDO('mysql:host=127.0.0.1;dbname='.$config['db'].'; port=3307', $config['user'], $config['pass']);

其中 $config 在单独的文件中定义。我得到的错误是:

Warning: PDO::__construct() [pdo.--construct]: [2002] Connection refused (trying to connect via tcp://127.0.0.1:3307) 
Error: SQLSTATE[HY000] [2002] Connection refused

然后最终

Fatal error: Call to a member function query() on a non-object in...

如果我用

mysql:host=localhost

我得到的错误是

Error: SQLSTATE[HY000] [2002] No such file or directory

现在我假设“连接被拒绝”比“没有这样的文件或目录”好,但我不知道从这里去哪里。知道为什么会这样吗?感谢您的帮助。

最佳答案

试试我现有的函数和常量变量,您也可以将这些常量更改为您拥有的数组变量。

define("SERVER_SQL_VERSION","mysql");
define("SQL_SERVER","localhost");
define("SQL_PORT","3306");
define("SQL_USERNAME","root");
define("SQL_PASSWORD","");
define("SQL_DB_NAME","db");

if(!function_exists('pdoConnect')) {
    function pdoConnect() {
        $pdo = new PDO(SERVER_SQL_VERSION.":host=".SQL_SERVER.";dbname=".SQL_DB_NAME."", "".SQL_USERNAME."", "".SQL_PASSWORD.""); 
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        return $pdo;
    }
}

您的串联可能存在问题,这一定有效...

我还分离了 SERVER_SQL_VERSION,并添加了一个函数来检查驱动程序是否可用...我正在使用 XAMPP 软件并且只有 mysql 和 sqlite 处于事件状态,如果您/其他人尝试使用 postgresql 等等...... .那一定也能正常工作。

if(!function_exists('check_sql_version')) {
    function check_sql_version() {
        $sql_available = false;     //make it false yet
        foreach(PDO::getAvailableDrivers() as $key => $val) {
            if(SERVER_SQL_VERSION == $val)
            {
                $sql_available = true;
            }
        }
        //check now if sql_available is true or false
        if($sql_available == true)
            return true;
        else
            return false;
    }
}

所以应该考虑一个样本:

if(!check_sql_version()) {
    echo '('.SERVER_SQL_VERSION.') is not available, you only have this drivers:<br/>';
    foreach(PDO::getAvailableDrivers() as $key => $val) {
        $key = $key + 1;
        echo $key.') '.$val.'<br/>';
    }
    exit(); //exit and dont proceed
}
$stmt = pdoConnect()->prepare("SELECT * FROM accounts");
$stmt->execute();

希望对您有所帮助!

关于php - PDO 连接到 MySQL 数据库被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267727/

相关文章:

SQL Server 触发器更新和增量计数器

database - 在 GORM 中按日期过滤

PHP 在文件中写入制表符?

php - 用于 mysql 搜索的过滤文本

SQLite 在 INSERT 和 UPDATE 时自动递增

c# - 插入mysql日期时间

mysql - 我可以使用 Snowflake 作为关系数据库吗?

php - 如何轻松循环遍历 MySQL 结果?

php - 设置 Mandrill 模板 Laravel

php - "Cannot pass parameter 2 by reference"PHP错误