CakePHP: не может получить доступ к базе данных MySQL - PullRequest
8 голосов
/ 28 октября 2009

Я новичок в CakePHP и просто выполняю процесс настройки, но я озадачен, почему Cake не может получить доступ к моей базе данных MySQL. На странице информации о Cake говорится, что мой каталог tmp доступен для записи, FileEngine используется для кэширования (не знаю, что это значит), и присутствует мой файл конфигурации базы данных, но CakePHP не может подключиться к базе данных.

Вот мои настройки:

  • PHP 5.3 (предварительно установлен на Snow Leopard)
  • MySQL 5.1.40 64-битная
  • CakePHP 1.2.4.8284

Вот шаги, которые я прошел:

  • Создана схема MySQL с именем cake_blog
  • Создан пользователь MySQL с именем cake_blog_user
  • Предоставил 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 непосредственно перед проверкой соединения с базой данных, отобразится сообщение об ошибке «Нет такого файла или каталога». Я понятия не имею, о каком файле или каталоге идет речь.

Спасибо!

Ответы [ 6 ]

9 голосов
/ 06 ноября 2009

Что обычно меня кусает, так это то, что 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' => '',
);

Должно работать все время.

8 голосов
/ 28 октября 2009

Если это сокет, просто отредактируйте /etc/php.ini, чтобы отразить следующее

pdo_mysql.default_socket=/tmp/mysql.sock

и

mysql.default_socket = /tmp/mysql.sock
6 голосов
/ 29 октября 2009

Полагаю, вы также можете сделать следующее

<?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 при запуске на рабочем сервере.

1 голос
/ 28 октября 2009

Спасибо всем за то, что указали мне правильное направление. Файл mysql.sock был перемещен в /tmp/mysql.sock вместо его расположения по умолчанию в /var/mysql/mysql.sock. Редактирование файла php.ini для отражения этой проблемы решило проблему.

0 голосов
/ 04 сентября 2016

В Ubuntu, если вы установили версии PHP 7.0 и 5.6, это не сработает.

Вам нужно переключиться, если у вас есть обе версии:

Посмотрите сначала, если версия 7.0: команда php -v.

Далее делай

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
0 голосов
/ 05 марта 2014

проверьте ваш phpinfo и используйте перечисленный сокет. это сработало для меня.

...