Ответ 1
Что для меня в конце концов было то, что я создал таблицу в моей базе данных, но в ней не было данных.
Чтобы CakePHP распознал соединение MySql, в нем должна быть таблица с данными.
Было несколько других сообщений об этом, но ни один из ответов не работал у меня.
Когда я перехожу на страницу CakePHP на моем локальном компьютере, есть одна ошибка:
Cake не может подключиться к базе данных. Подключение к базе данных "Mysql" отсутствует или не может быть создан.
Когда я запускаю этот полезный код в моем home.ctp, я получаю следующий ответ:
Ошибка!: SQLSTATE [42000] [1049] Неизвестная база данных 'test'
Однако мой Users/Ben/Sites/myapp/app/Config/database.php
выглядит так (я установил MAMP для поиска корня документа в Users/Ben/Sites):
<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'Ben',
'password' => 'mypass',
'database' => 'CV',
);
}
Я создал пользователя mysql с именем Ben
с паролем mypass
и создал под ним базу данных под названием CV
. Более того, я не могу найти ссылку на базу данных test
где угодно. Помощь?
Что для меня в конце концов было то, что я создал таблицу в моей базе данных, но в ней не было данных.
Чтобы CakePHP распознал соединение MySql, в нем должна быть таблица с данными.
Попробуйте добавить сокет:
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Альтернативой unix_socket
(особенно для людей OS X) является замена localhost
на 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',
);
Изменить php.ini
и добавить:
extension=php_pdo_mysql.dll
Затем перезапустите веб-сервер
На Mac, используя MAMP в качестве платформы разработки, для торта правильное решение использует решение Domingo Casarrubio.
Добавьте параметр unix_socket
в конфигурацию базы данных.
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Эта ошибка также может быть вызвана, если ваш пользователь подключаемой базы данных не имеет соответствующих привилегий. Я считаю, что вам нужен минимум INSERT, SELECT, UPDATE и DELETE.
Всегда проверяйте имя пользователя/пароль и привилегии пользователя сначала, так как CakePHP, скорее всего, даст неопределенную ошибку подключения к базе данных.
Я заметил, что вы спросили об этом год назад, и, скорее всего, сейчас это решило бы. Тем не менее, для тех, кто сталкивается с теми же проблемами при попытке установить CakePHP на XAMPP, все, что вам нужно сделать, это изменить "login" на "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',
);
Что это.
У меня была такая же проблема, и в итоге выяснилось, что это было вызвано тем, что CakePhp не признал, что я использовал пользователя с паролем, даже если этот пользователь был создан в PHPMyAdmin. Мне пришлось использовать пользовательский "root" без пароля.
Я нашел это после внесения следующего изменения в файл /lib/Cake/Error/exceptions.php.
Исходная строка:
protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';
Вместо этого вместо этого заменяется :
protected $_messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n %s";
Это даст вам причину проблемы, чтобы вы могли правильно изменить причину.
Возможно, поддержка mysql PDO отсутствует.
как root (или используя sudo):
apt-get install php5-mysql
Возможно, вам понадобится создать таблицу в вашем php файле... Откройте phpMyAdmin и проверьте, чтобы они были CV базы данных.
Просто, чтобы помочь пользователям Ubuntu: У меня была такая же ошибка в моей машине ubuntu 13.10 с новейшим xampp downlaoded непосредственно от apachefriends. Пробовал большую часть материала в каждом сообщении, которое я мог найти об этой ошибке, но не о специфических для Mac материалах. В конце концов, исправление оказалось таким же, как и выбранный здесь ответ:
Найти сокет, который mysqld создает для программ для подключения:
[email protected] /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'
Для меня это, наконец, привело к тому, что мои команды торта могли исполняться без "Ошибка: соединение с базой данных" Mysql "отсутствует или не может быть создано.".
Это ваша модель. Откройте это и должна быть следующая строка
public $useDbConfig = 'local';
Это перезаписывает глобальную конфигурацию и возвращает ее на локальный
Я попытался сплайсировать код из примера 2 http://php.net/manual/en/pdo.connections.php в /app/View/Pages/home.ctp. Мне пришлось исправить аргументы конструктора PDO и изменить имя таблицы в запросе. Код примера 2 вернул ошибку "Ошибка!: не удалось найти драйвер". Основываясь на ответе King Jk, я пытался изменить php.ini, когда я начал задаваться вопросом, где может жить php_pdo_mysql.so. http://php.net/pdo_mysql показал, как он был скомпилирован как часть PHP через параметр --with-pdo-mysql для настройки. Исправлена проблема с перекомпиляцией. Примечание. Я работаю над системой Ubuntu 12.10 с PHP 5.5.9 и Apache Webserver 2.4.6.
В моем случае это было потому, что базы данных не существовало. Я ожидал, что запуск ./app/Console/cake schema create
создаст его, но это не так. Создание его с помощью create database <database name>
в mysql сделало трюк (хотя я уже назначил привилегии).
У меня была эта проблема, так как обновление до OSX Yosemite и вставка следующей строки сделали трюк для меня:
'unix_socket' => '/tmp/mysql.sock'
Я боролся с этим весь уик-энд и, наконец, решил. Оказывается, что php.ini указывает на несуществующий "расширительный каталог". Создайте файл phpinfo() и посмотрите на значение этого поля:
Я заметил, что в установленной папке mamp php есть папка no-debug-non-zts-20131226, которая отличается от значения, указанного в phpinfo(). Я сделал клонирование этой папки и изменил имя на значение phpinfo(). Возможно, вы можете изменить файл php.ini, но я не хотел.
Я не знаю, решила ли вы свою проблему, но я публикую это, потому что моя проблема была другой, и google взял меня сюда, поэтому я надеюсь помочь будущим гуглерам, имеющим аналогичную проблему.
Надеюсь, что это поможет.
Потому что выпечка торта использует сокет unix для подключения к базе данных
так что вам нужно добавить unix_socket для строки подключения.
Вы должны подтвердить местоположение, в котором хранится mysql.sock в WAS
Пример: в моем случае я использую xampp на MACOS 10.11
(изменить файл Config/database.php)
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’
);
Наконец, он работает для меня!
Если вы используете Godaddy (или любой другой общий хостинг, если на то пошло), они могут ограничивать исходящие соединения только с портами 80 и 443.