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

Laravel 5.1 - Connecting to MySQL Database (MAMP)

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


在我的配置>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

我的 database>migrations 中也有 create_users_table.phpcreate_password_resets_table.php(尽管我没有运行 任意 migration:make)


MAMP 正在引导并 运行 在本地主机上加载项目时成功地连接服务器。


这是我的 MAMP 设置:

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


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

PDOException in Connector.php line 50: could not find driver

  1. in Connector.php line 50

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

  3. at 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', 'collation' => 'utf8_unicode_ci', 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'prefix' => '', 'strict' => false, 'name' => 'mysql'), array('0', '2', '0', false, false)) in MySqlConnector.php line 22

and so on...

找到我的答案。这是修复它的方法:

  • 启动 MAMP
  • 在左上角,转到 "MAMP" -> "Preferences"
  • 转到 "PHP" 选项卡
  • 勾选 PHP 5.5.17(或任何你拥有的)而不是默认勾选的那个(5.6.1 -> 5.5.17 和最新版本的 MAMP)

这对我来说很简单,我在 .env 文件的本地主机中添加了 :8889。

DB_HOST=localhost:8889

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

对我来说最重要的事情是定义 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,
    ],

在 mac 或 unix 上,您必须在配置 database.php 文件

中包含套接字路径

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

就我而言,按照他们中的许多人的建议设置 database.php 没有任何意义。

因为在 开发模式 中主要需要进行此更改。所以设置 unix_socket 的正确方法如下

文件:.env

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

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

NOTE: I have tested this setting in Laravel 5.7 and above versions