Там было несколько других сообщений, но ни один из ответов не работал для меня.
Когда я перехожу на страницу 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
базы данных где угодно. Помогите?
Попробуйте добавить сокет:
'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', );
На Mac, используя MAMP в качестве платформы разработки, для торта правильное решение использует решение Domingo Casarrubio.
Добавьте параметр unix_socket
в конфигурацию базы данных.
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Измените php.ini
и добавьте:
extension=php_pdo_mysql.dll
Затем перезапустите веб-сервер
Эта ошибка также может быть вызвана, если пользователь вашей соединительной базы данных не имеет соответствующих привилегий. Я считаю, что вам нужен минимум 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 распознал соединение MySql, в нем должна быть таблица с данными.
У меня была такая же проблема, и в итоге выяснилось, что это было вызвано тем, что 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 для программ для подключения:
user@host /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.