35

还有其他几篇关于此的帖子,但似乎没有一个答案对我有用。

当我导航到本地机器上的 CakePHP 页面时,出现一个错误:

Cake 无法连接到数据库。数据库连接“Mysql”丢失,或无法创建。

当我在 home.ctp 中运行这个有用的代码时,我得到以下响应:

错误!:SQLSTATE [42000] [1049] 未知数据库“测试”

但是,我的Users/Ben/Sites/myapp/app/Config/database.php样子是这样的(我设置 MAMP 以在 Users/Ben/Sites 中查找文档根目录):

<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'Ben',
        'password' => 'mypass',
        'database' => 'CV',
    );
}

我创建了一个Ben用密码调用的 mysql 用户,mypass并在该用户下创建了一个数据库CV。此外,我在任何地方都找不到提到test数据库的地方。帮助?

4

19 回答 19

49

尝试添加套接字:

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
于 2013-10-09T21:07:56.223 回答
22

unix_socket(尤其是对于 OS X 用户)的替代方法是替换localhost127.0.0.1

如下:

public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => '127.0.0.1',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database-name',
                'prefix' => '',
                'encoding' => 'utf8',
        );
于 2015-01-20T10:17:59.250 回答
13

编辑php.ini并添加:

extension=php_pdo_mysql.dll 

然后重启你的网络服务器

于 2013-11-11T11:29:25.600 回答
10

On Mac, using MAMP as a development platform, for cake the correct solution is using Domingo Casarrubio solution.

Add the unix_socket parameter to your database configurations.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
于 2014-03-19T02:05:40.263 回答
6

如果您的连接数据库用户没有适当的权限,也可能导致此错误。我相信您只需要最少的 INSERT、SELECT、UPDATE 和 DELETE。

始终首先检查用户名/密码用户权限,因为 CakePHP 很可能会给出一个模糊的数据库连接错误。

于 2014-02-27T20:19:39.000 回答
5

我注意到你在一年前就问过这个问题,现在很可能已经解决了这个问题。但是,对于那些在尝试在 XAMPP 上安装 CakePHP 时遇到同样问题的人,您所要做的就是将 'login' 更改为 'root',即 XAMPP 的默认登录,并将 'password' 保留为 '',即空白的。database.php 文件中的完整代码应如下所示:

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'ckblog',//replace with your own database name
    'prefix' => '',
    //'encoding' => 'utf8',
);

而已。

于 2014-08-14T00:42:38.083 回答
5

我遇到了同样的问题,最终发现这是由于 CakePhp 不接受我使用带密码的用户,即使该用户是在 PHPMyAdmin 中创建的。我不得不使用没有密码的用户“root”。

在对文件/lib/Cake/Error/exceptions.php进行以下更改后,我发现了这一点。

原行:

protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';

改为这个(注意从单引号到双引号的变化):

protected $_messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n    %s";

这将为您提供问题的原因,以便您可以正确更改原因。

于 2014-07-13T13:03:35.527 回答
2

可能是缺少 mysql PDO 支持。

以 root 身份(或使用 sudo):

apt-get install php5-mysql
于 2014-10-28T18:00:47.527 回答
2

自从升级到 OSX Yosemite 并插入以下行对我来说,我遇到了这个问题:

 'unix_socket' => '/tmp/mysql.sock'
于 2014-10-20T15:12:04.233 回答
1

只是为了帮助Ubuntu用户:我在 ubuntu 13.10 机器上遇到了同样的错误,最新的 xampp 直接从 apachefriends 下载。尝试了我能找到的有关此错误的每篇文章中的大部分内容,但没有尝试特定于 mac 的内容。最后,修复恰好与此处的选定答案相同:

找到 mysqld 为程序连接创建的套接字:

user@host /opt$ find . -name mysql.sock
/opt/lampp/var/mysql/mysql.sock

将其添加到您的 cakePHP 数据库配置文件 (cakePHP)/app/Config/database.php

'unix_socket' => '/opt/lampp/var/mysql/mysql.sock'

对我来说,这最终导致我的蛋糕命令能够在没有“错误:数据库连接“Mysql”丢失或无法创建。 ”的情况下执行。

于 2014-02-03T17:58:11.270 回答
1

因为,cake bake 使用 unix socket 连接到数据库
,因此您需要为连接字符串添加 unix_socket。
您必须确认在 WAS 中存储 mysql.sock 的位置
示例:在我的情况下,我在 MACOS 10.11 上使用 xampp
(编辑文件 Config/database.php)

public $default = array(
  ‘datasource’ => ‘Database/Mysql’,
  ‘persistent’ => false,
  ‘host’ => ‘localhost’,
  ‘login’ => ‘root’,
  ‘password’ => ‘root’,
  ‘database’ => ‘cakephp’,
  ‘encoding’ => ‘utf8’,
  ‘unix_socket’ => ‘/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock’
);

最后,这对我有用!

于 2016-05-04T02:23:27.663 回答
0

是你的模型。打开它,必须有以下行

public $useDbConfig = 'local';

这会覆盖全局配置并将其设置回本地

于 2014-02-11T12:07:30.927 回答
0

我整个周末都在为此苦苦挣扎,终于解决了。原来 php.ini 指向一个不存在的“扩展目录”。创建一个 phpinfo() 文件并查看该字段的值: extensions_dir

我注意到在 mamp php 安装文件夹中有一个 no-debug-non-zts-20131226 文件夹,它与 phpinfo() 中显示的值不同。我所做的是克隆这个文件夹并将名称更改为 phpinfo() 的值。可能您可以修改 php.ini 文件,但我不想这样做。

我不知道你是否解决了你的问题,但我发布这个是因为我的问题不同,谷歌把我带到了这里,所以我希望能帮助未来遇到类似问题的谷歌人。

希望这可以帮助。

于 2014-11-02T18:46:09.997 回答
0

就我而言,这是因为数据库不存在。我预计运行./app/Console/cake schema create会创建它,但它没有。在 mysql 中创建它就可以create database <database name>了(尽管我已经分配了权限)。

于 2014-04-18T03:30:28.963 回答
0

我尝试将http://php.net/manual/en/pdo.connections.php的示例 2 中的代码拼接到 /app/View/Pages/home.ctp 中。我必须修复 PDO 构造函数的参数并更改查询中表的名称。示例 2 代码返回错误“错误!:找不到驱动程序”。根据 King Jk 的回答,当我开始怀疑 php_pdo_mysql.so 可能在哪里时,我试图修改 php.ini。 http://php.net/pdo_mysql展示了如何通过 --with-pdo-mysql 选项将其编译为 PHP 的一部分进行配置。重新编译解决了我的问题。注意我正在使用 PHP 5.5.9 和 Apache Webserver 2.4.6 开发 Ubuntu 12.10 系统

于 2014-02-21T05:50:35.527 回答
0

您可能需要在 php 文件中创建表...打开 phpMyAdmin 并检查以确保它们的数据库 CV 存在。

于 2013-11-20T00:56:27.240 回答
0

最后为我做了什么,我在我的数据库中创建了一个表,但里面没有数据。

为了让 CakePHP 识别 MySql 连接,必须有一个包含数据的表。

于 2013-11-12T02:21:43.320 回答
0

系统配置:

  • 软呢帽 32
  • php-fpm 7.4.13
  • mariadb 10.4.17
  • 蛋糕 2.10.17

来自 CAKE 的错误消息:

数据库连接“Mysql”丢失,或无法创建。

使用https://stackoverflow.com/a/24722976/5025060上的答案增强错误消息

数据库连接“Mysql”丢失,或无法创建:未启用所选驱动程序

我的问题是没有安装 PHP 和 SQL 之间的“连接器”。解决方案是:

dnf install php-mysqlnd

这允许 PHP 连接到 CAKE 的 database.php 配置文件中指定的数据库。

于 2020-12-10T19:01:57.697 回答
0

如果您使用的是 Godaddy(或任何其他共享主机),他们可能会将传出连接限制为仅端口 80 和 443。

于 2017-09-15T18:07:15.773 回答