CakePHP数据库连接“;Mysql“;缺少,或无法创建
关于这一点,还有其他几篇帖子,但似乎没有一个答案适合我 当我在本地机器上导航到CakePHP页面时,有一个错误: Cake无法连接到数据库。数据库连接 缺少或无法创建“Mysql” 当我在my home.ctp中运行时,我得到以下响应: 错误!:SQLSTATE[42000][1049]未知数据库“测试” 但是,我的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中查找文档根): 尝试添加套接字
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.17
public $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’
);