ТортPHP:Не могу получить доступ к базе данных MySQL
-
06-07-2019 - |
Вопрос
Я новичок в 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