无法使用 Laravel 5.2 连接到 Mysql 服务器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36061544/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 13:25:34  来源:igfitidea点击:

Can't connect to Mysql server with Laravel 5.2

phpmysqllaravel

提问by Joris Schelfhout

When i add a MySQL connection to my laravel installation it does not seem to work. I double checked every setting, also on the remote server. The credentials are correct and everything should work. Underneath I'll post my controler, view and the database.config files so you can see what's wrong. I've been trying to fix this for the past 2 hours and I just have no idea what is wrong :( When i test if there's data it doesn't say the table does not exist, it just returns null. (I do have select permissions)

当我向 Laravel 安装添加 MySQL 连接时,它似乎不起作用。我仔细检查了每个设置,也在远程服务器上。凭据正确,一切正常。在下面,我将发布我的控制器、视图和 database.config 文件,以便您查看问题所在。过去 2 小时我一直在尝试解决这个问题,但我不知道出了什么问题:( 当我测试是否有数据时,它没有说表不存在,它只是返回 null。(我确实有选择权限)

Controller

控制器

    <?php

namespace App\Http\Controllers;

use DB;
use App\Log;

class DataController extends Controller
{
    public function index()
    {
        $logs = Log::distinct()->select(['device_name','device_id'])->get();

        return view('data.index', compact('logs'));
    }

    public function show($device_id)
    {
        $logs = DB::table('datalog_net_data')->take(100);
        return view('data.show', compact('logs'));
    }
    public function dashboard()
    {
        $pageTitle = "Dashboard";
        return view('data.dashboard', compact('pageTitle'));
    }
}

The database config file

数据库配置文件

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | PDO Fetch Style
    |--------------------------------------------------------------------------
    |
    | By default, database results will be returned as instances of the PHP
    | stdClass object; however, you may desire to retrieve records in an
    | array format for simplicity. Here you can tweak the fetch style.
    |
    */

    'fetch' => PDO::FETCH_CLASS,

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => 'mysql',

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver'   => 'sqlite',
            'database' => database_path('database.sqlite'),
            'prefix'   => '',
        ],

        'mysql' => [
            'driver'    => 'mysql',
            'host'      => '192.168.1.113',
            'database'  => 'gs_database',
            'username'  => 'laravel',
            'password'  => '1234',
            'charset'   => 'Pneunet44',
            'collation' => '',
            'prefix'    => '%',
            'strict'    => false,
            'engine'    => null,
        ],

        'pgsql' => [
            'driver'   => 'pgsql',
            'host'     => env('DB_HOST', 'localhost'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset'  => 'utf8',
            'prefix'   => '',
            'schema'   => 'public',
        ],

        'sqlsrv' => [
            'driver'   => 'sqlsrv',
            'host'     => env('DB_HOST', 'localhost'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset'  => 'utf8',
            'prefix'   => '',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer set of commands than a typical key-value systems
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'cluster' => false,

        'default' => [
            'host'     => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port'     => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

];

The return when i var_dump the first log row http://puu.sh/nJLtV/028b2b5192.jpg

当我 var_dump 第一个日志行时的返回 http://puu.sh/nJLtV/028b2b5192.jpg

I hope you guys know, because i have no idea.

我希望你们知道,因为我不知道。

回答by Alexey Mezenin

You also need to grant rights, so your Laravel app could connect remote MySQL server.

您还需要授予权限,以便您的 Laravel 应用程序可以连接远程 MySQL 服务器。

Example:

例子:

mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

回答by Taylor

Change the DB_HOST in you .envfile from:

将您.env文件中的 DB_HOST 更改为:

DB_HOST=localhost

to

DB_HOST=127.0.0.1