Laravel 5.1 - 连接到 MySQL 数据库 (MAMP)

Posted

技术标签:

【中文标题】Laravel 5.1 - 连接到 MySQL 数据库 (MAMP)【英文标题】:Laravel 5.1 - Connecting to MySQL Database (MAMP) 【发布时间】:2015-10-11 01:40:59 【问题描述】:

网上有一些话题在讨论这个问题,但是我找不到任何关于这个问题的简洁解释或任何可靠的答案。我想要实现的是将 Laravel 5.1 连接到 MAMP 的 mysql 数据库。


在我的 config>app.php:

   'default' => env('DB_CONNECTION', 'mysql'),


   'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost:8889',
        'database'  => 'test',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'prefix'    => '',
        'strict'    => false,
    ],

在我的 .env:

      DB_HOST=localhost
      DB_DATABASE=test
      DB_USERNAME=root
      DB_PASSWORD=root

我也有 .env.example:(我认为它没有功能)

      DB_HOST=localhost
      DB_DATABASE=homestead
      DB_USERNAME=homestead
      DB_PASSWORD=secret

我的数据库>迁移中也有create_users_table.phpcreate_password_resets_table.php(即使我没有运行任何迁移:make)


MAMP 在 localhost 上加载项目时成功引导和运行服务器。


这是我的 MAMP 设置:

然后创建了 test 数据库(其中包含我之前在其他项目中创建并使用的表,而不是 Laravel。)


尽管对我来说一切似乎都是正确的,但在尝试提交身份验证表单时,我收到了这个错误:

Connector.php 第 50 行中的 PDOException: 找不到驱动程序

    在 Connector.php 第 50 行

    在 PDO->__construct ('mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=test', 'root', 'root', array('0', ' 2', '0', false, false)) 在 Connector.php 第 50 行

    在 Connector->createConnection('mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=test', array('driver' => 'mysql', 'host' = > 'localhost:8889', 'database' => 'test', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collat​​ion' => 'utf8_unicode_ci ', 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'prefix' => '', 'strict' => false, 'name' => 'mysql'), array(' 0', '2', '0', false, false)) 在 MySqlConnector.php 第 22 行

等等……

【问题讨论】:

您好,您使用的是哪个版本的 MAMP? @dyachenko 嗨,3.0.7.1 【参考方案1】:

在 mac 或 unix 上,您必须在配置 database.php 文件中包含套接字路径

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

【讨论】:

您的回答对我很有帮助,因为我无法使用 mamp 建立从 laravel 项目到 MySQL 的连接,但随后我将 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 添加到我的 .env 文件并建立了连接。你的回答给了我这个想法。谢谢并投票。 2020:我正在使用 MacOS Mojave,这确实是我建立连接所需要的 @DerkJanSpeelman 不适合我***.com/questions/60865114/… @twister_void 是的,也许最好在 Docker 中完成所有设置。【参考方案2】:

这对我来说很简单,我在 .env 文件中将 :8889 添加到 localhost。

DB_HOST=localhost:8889

这是因为在 MAMP 首选项中,:8889 是默认端口。

【讨论】:

【参考方案3】:

对我来说最重要的是定义 UNIX 套接字。因为我的机器上有另一个 MYSQL - Laravel 试图连接到那个 MYSQL 进程中的数据库。

为要使用的 MAMP 数据库定义 UNIX 非常有效。尝试将其添加到 database.php 中的 MYSQL 配置中

   'mysql' => [
      'driver' => 'mysql',
      'host' => env('DB_HOST', '127.0.0.1'),
      'port' => env('DB_PORT', '3306'),
      'database' => env('DB_DATABASE', 'forge'),
      'username' => env('DB_USERNAME', 'forge'),
      'password' => env('DB_PASSWORD', ''),
      'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
      'charset' => 'utf8mb4',
      'collation' => 'utf8mb4_unicode_ci',
      'prefix' => '',
      'strict' => true,
      'engine' => null,
    ],

【讨论】:

【参考方案4】:

就我而言,像许多人建议的那样在 database.php 中进行设置没有任何意义。

因为在开发模式中最需要这种更改。所以设置unix_socket的正确方法如下

文件:.env

DB_SOCKET='/Applications/MAMP/tmp/mysql/mysql.sock'

通过上述方式,.env 已经包含在 .gitignore 中,并且在远程部署您的项目时不会产生任何其他问题。

注意:我已经在 Laravel 5.7 及以上版本中测试过这个设置

【讨论】:

对我来说,它不适用于从本地 laravel 副本进行远程连接。 ***.com/questions/60865114/…【参考方案5】:

找到了我的答案。这是一种解决方法:

启动 MAMP 在左上角,转到“MAMP”->“首选项” 转到“PHP”标签 勾选 PHP 5.5.17(或任何您拥有的),而不是默认勾选的那个(5.6.1 -> 5.5.17 和最新版本的 MAMP)

【讨论】:

以上是关于Laravel 5.1 - 连接到 MySQL 数据库 (MAMP)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Docker 容器未连接到本地 mysql

将 Laravel 连接到 XAMPP MySQL (MariaDB) 数据库 SQLSTATE[HY000] [2006] MySQL 服务器已消失

在docker上使用laravel时无法连接到mysql数据库(未找到,pdo,连接被拒绝)

Laravel 5.1 索引和创建授权

如何将带有前缀列的表连接到 PHP MySQL 或 Laravel 中的另外两个表

在 laravel 5.8 中连接到第二个数据库时出错