mysql - Laravel 4.2 升级后无法连接数据库

标签 mysql laravel laravel-4

我刚刚使用此处推荐的步骤将我的 Laravel 安装从 4.1.(something) 升级到 4.2.7:http://laravel.com/docs/upgrade

现在我在每个页面上都会遇到此错误:

PDOException (2002) 
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '' (111)

MySQL 没有在本地运行,但它不应该在本地运行。我没有任何连接本地 MySQL 的配置,我的开发 SQL 服务器是远程的。为什么它尝试连接到本地?

是否存在升级指南中未提及的某些配置更改? 4.1 中一切都很美好。

来 self 的 app/config/database.php 文件:

'default'     => 'mysql',
...
'connections' => array(
    'mysql'       => array(
        'driver'        => 'mysql',
        'host'          => 'myrealdb.us-east-1.rds.amazonaws.com',
        'database'      => 'myrealdbname',
        'username'      => 'myrealuser',
        'password'      => 'myrealpass',
        'charset'       => 'utf8',
        'collation'     => 'utf8_unicode_ci',
        'prefix'        => '',
        'database_port' => '3306',
        'unix_socket'   => '',
    ),
    ...
);

我尝试了 php artisan clear-compiledphp artisan dump-autoload 以防万一。没有效果。

最佳答案

编辑:我为此提交了一个修复程序,该修复程序已合并到 4.2 分支中。您不必再担心此错误。

我明白了!这似乎是 Laravel 使用数据库配置方式的改变,我希望这个答案对其他人有帮助。

简短的版本是:如果您的连接配置像我的一样(在问题中),请从数组中删除 unix_socket 条目。

以前,我总是复制并编辑 connections 数组中的默认条目,将 unix_socket 参数保留为空。显然现在有一个检查假设如果 unix_socket 存在,它应该使用套接字 DSN 字符串。我的配置中的空字符串通过了检查。您可以在 /vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php 中看到这是如何发生的。函数 getDsngetSocketDsngetHostDsn 讲述了这个故事。

粘贴,因为这最终会改变:

protected function getDsn(array $config)
{
    return isset($config['unix_socket']) ? $this->getSocketDsn($config) : $this->getHostDsn($config);
}
...
protected function getSocketDsn(array $config)
{
    extract($config);

    return "mysql:unix_socket={$config['unix_socket']};dbname={$database}";
}
...
protected function getHostDsn(array $config)
{
    extract($config);

    return isset($config['port'])
        ? "mysql:host={$host};port={$port};dbname={$database}"
        : "mysql:host={$host};dbname={$database}";
}

关于mysql - Laravel 4.2 升级后无法连接数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035135/

相关文章:

java - 错误: MySQLSyntaxErrorException in a java-based web app

PHP MySQLi 权限被拒绝但从 MySQL CLI 工作

javascript - 多个文件选择仅返回最后一个文件

php - laravel 更新功能不起作用

laravel - 验证: how to set a field that is not required to 'null' when input is empty

mysql - 如何知道使用 Pandas 删除的行数

python - 覆盖 Flask-Sqlalchemy 中的表名称

ajax - laravel 5.1 请求::ajax 返回 false

Laravel Artisan 队列 - 高 CPU 使用率

php - 在 Laravel 4 单元测试中,如何在请求中设置 cookie?