CakePHP数据库连接“;Mysql“;缺少,或无法创建

CakePHP数据库连接“;Mysql“;缺少,或无法创建,php,mysql,macos,cakephp,mamp,Php,Mysql,Macos,Cakephp,Mamp,关于这一点,还有其他几篇帖子,但似乎没有一个答案适合我 当我在本地机器上导航到CakePHP页面时,有一个错误: Cake无法连接到数据库。数据库连接 缺少或无法创建“Mysql” 当我在my home.ctp中运行时,我得到以下响应: 错误!:SQLSTATE[42000][1049]未知数据库“测试” 但是,我的Users/Ben/Sites/myapp/app/Config/database.php如下所示(我将MAMP设置为在Users/Ben/Sites中查找文档根): 尝试添加套接字

关于这一点,还有其他几篇帖子,但似乎没有一个答案适合我

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

Cake无法连接到数据库。数据库连接 缺少或无法创建“Mysql”

当我在my home.ctp中运行时,我得到以下响应:

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

但是,我的
Users/Ben/Sites/myapp/app/Config/database.php如下所示(我将MAMP设置为在Users/Ben/Sites中查找文档根):

尝试添加套接字:

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

编辑
php.ini
并添加:

extension=php_pdo_mysql.dll 

然后重新启动web服务器

最终为我做的是我在数据库中创建了一个表,但其中没有数据


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

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

只是为了帮助Ubuntu用户: 我的Ubuntu13.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'

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

这是您的模型。打开它,一定有下面一行

public $useDbConfig = 'local';

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

我尝试将示例2中的代码拼接到/app/View/Pages/home.ctp中。我必须修复PDO构造函数的参数,并更改查询中表的名称。示例2代码返回错误“error!:找不到驱动程序”。根据King Jk的回答,我正试图修改php.ini,这时我开始想知道php_pdo_mysql.so可能住在哪里。展示了如何通过--with-pdo-mysql选项将其编译为PHP的一部分进行配置。重新编译修复了我的问题。注意:我正在使用一个Ubuntu 12.10系统,该系统使用PHP5.5.9和ApacheWebServer 2.4.6。如果连接数据库的用户没有适当的权限,也会导致此错误。我相信您只需要最少的插入、选择、更新和删除


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

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

unix\u socket
参数添加到数据库配置中

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

就我而言,这是因为数据库不存在。我希望运行
/app/Console/cake schema create
会创建它,但它没有。使用mysql中的
create database
创建它成功了(尽管我已经分配了特权)。

我也遇到了同样的问题,最终发现这是因为CakePhp不接受我使用了一个带有密码的用户,即使该用户是在PHPMyAdmin中创建的。我必须使用没有密码的用户“root”

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

原始行:

protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';
改为此(请注意从单引号改为双引号):


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

我注意到您在一年前就提出了这个问题,现在很可能已经解决了这个问题。但是,对于那些试图在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',
);

就是这样。

自从升级到OSX Yosemite后,我就遇到了这个问题,插入下面的行为我解决了这个问题:

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

可能缺少mysql PDO支持

作为root用户(或使用sudo):


我整个周末都在努力解决这个问题,最后终于解决了。结果表明php.ini指向一个不存在的“扩展目录”。创建一个phpinfo()文件并查看此字段的值:

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

我不知道你是否解决了你的问题,但我之所以发布这篇文章,是因为我的问题不同,谷歌把我带到了这里,所以我希望能帮助未来的谷歌用户解决类似的问题


希望这能有所帮助。

unix_socket的另一种替代方法是用
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',
        );

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

最后,这是我的工作

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

系统配置:

  • 软呢帽32
  • php fpm 7.4.13
  • mariadb 10.4.17
  • 蛋糕2.10.17public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'ckblog',//replace with your own database name 'prefix' => '', //'encoding' => 'utf8', );
apt-get install php5-mysql
public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => '127.0.0.1',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database-name',
                'prefix' => '',
                'encoding' => 'utf8',
        );
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’
);