Вопрос

Я новичок в 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@%.
  • Скопировал файл data.php.default в базу данных.php и соответствующим образом отредактировал данные подключения к базе данных.

Вот соответствующие данные конфигурации из data.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',            
    )
?>

это может означать, что вам нужно будет отредактировать файл data.php, когда вы начнете работать на рабочем сервере.

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

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

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

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

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

Дальше делай

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top