我是 CakePHP 的新手,刚刚完成配置过程,但很困惑为什么 Cake 无法访问我的 MySQL 数据库。Cake 信息页面显示我的 tmp 目录是可写的,FileEngine 正在用于缓存(不知道这意味着什么),并且我的数据库配置文件存在,但 CakePHP 无法连接到数据库。

这是我的设置详细信息:

  • PHP 5.3(雪豹上预装)
  • MySQL 5.1.40 64 位
  • CakePHP 1.2.4.8284

以下是我经历的步骤:

  • 创建了一个名为 cake_blog 的 MySQL 模式
  • 创建一个名为 cake_blog_user 的 MySQL 用户
  • 授予 cake_blog_user 对 cake_blog@localhost 和 cake_blog@% 的适当权限
  • 将database.php.default文件复制到database.php并根据需要编辑数据库连接详细信息

以下是database.php中的相关配置数据:

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'cake_blog_user',
        'password' => 'cake_blog_password',
        'database' => 'cake_blog',
        'prefix' => '',
    );

我在这里错过了什么吗?我还应该提到,如果我插入 echo mysql_error(); 在测试数据库连接之前,直接进入/cake/libs/view/pages/home.ctp文件,显示的错误是“没有此类文件或目录”。我不知道它在说什么文件或目录。

谢谢!

有帮助吗?

解决方案

如果是套接字,只需编辑 /etc/php.ini 以反映以下内容

pdo_mysql.default_socket=/tmp/mysql.sock

mysql.default_socket = /tmp/mysql.sock

其他提示

通常让我感到困扰的是 MySQL 将“localhost”视为“通过 unix 套接字连接”和“127.0.0.1”“通过 TCP 端口连接”。对于 XAMPP(至少在 mac 上)之类的东西,unix 套接字文件不存在。 只需使用 127.0.0.1 反而。

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => '127.0.0.1',
    'login' => 'cake_blog_user',
    'password' => 'cake_blog_password',
    'database' => 'cake_blog',
    'prefix' => '',
);

应该一直工作。

我相信你还可以做到以下几点

<?php
    public $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'cake_blog_user',
        'password' => 'cake_blog_password',
        'database' => 'cake_blog',
        'prefix' => '',
        'port' => '/tmp/mysql.sock',            
    )
?>

这样做可能意味着您在生产服务器上上线时需要编辑database.php 文件。

感谢大家为我指明了正确的方向。mysql.sock 文件已移至 /tmp/mysql.sock 而不是其默认位置 /var/mysql/mysql.sock. 。编辑 php.ini 文件以反映这一点已经解决了问题。

检查您的 phpinfo 并使用列出的套接字。这对我有用。

在 Ubuntu 上,如果您同时安装了 7.0 和 5.6 版本的 PHP,则此操作将不起作用。

如果您有两个版本,则需要切换:

先看是否是7.0版本:命令是 php -v.

接下来做

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top