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

时间:2013-10-09 18:50:45

标签: php mysql macos cakephp mamp

此外还有其他一些帖子,但没有一个答案似乎对我有用。

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

  

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

当我在home.ctp中运行this helpful code时,我收到以下回复:

  

错误!:SQLSTATE [42000] [1049]未知数据库'test'

但是,我的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的密码为mypass的mysql用户,并在其下创建了一个名为CV的数据库。而且,我无法在任何地方找到test数据库。帮助

19 个答案:

答案 0 :(得分:47)

尝试添加套接字:

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

答案 1 :(得分:18)

替代unix_socket(特别是对于OS X人员)是将localhost替换为127.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',
        );

答案 2 :(得分:10)

修改php.ini并添加:

extension=php_pdo_mysql.dll 

然后重新启动您的网络服务器

答案 3 :(得分:8)

在Mac上,使用MAMP作为开发平台,正确的解决方案是使用Domingo Casarrubio解决方案。

unix_socket参数添加到数据库配置中。

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:5)

我注意到你一年前曾问过这个问题,而且很可能现在已经解决了这个问题。但是,对于那些在尝试在XAMPP上安装CakePHP时遇到相同问题的人,您所要做的就是将“登录”更改为“root”,即XAMPP的默认登录名,并将“密码”保留为“”,即空白。 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',
);

就是这样。

答案 6 :(得分:2)

可能缺少mysql PDO支持。

以root身份(或使用sudo):

apt-get install php5-mysql

答案 7 :(得分:2)

我遇到了同样的问题,最终发现它是由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";

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

答案 8 :(得分:0)

系统配置:

  • Fedora 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配置文件中的指定连接到数据库。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

因为,蛋糕烘烤使用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’
);

最后,这对我有用!

答案 11 :(得分:0)

整个周末我一直在努力解决这个问题,最终解决了这个问题。事实证明,php.ini指向一个不存在的“扩展目录”。创建一个phpinfo()文件并查看该字段的值: extensions_dir

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

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

希望这有帮助。

答案 12 :(得分:0)

自从升级到OSX Yosemite以来,我遇到了这个问题,插入以下行就是我的诀窍:

 'unix_socket' => '/tmp/mysql.sock'

答案 13 :(得分:0)

就我而言,这是因为数据库不存在。我希望运行./app/Console/cake schema create会创建它,但事实并非如此。在mysql中使用create database <database name>创建它可以解决问题(虽然我已经分配了权限)。

答案 14 :(得分: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系统

答案 15 :(得分:0)

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

public $useDbConfig = 'local';

这会覆盖全局配置&amp;将其设置回本地

答案 16 :(得分:0)

只是为了帮助 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“缺失,或者无法创建。”。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

最后,我在我的数据库中创建了一个表,但其中没有数据。

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