Ошибка CakePHP Bake Shell: соединение с базой данных «Mysql» отсутствует или не может быть создано

У меня проблема с выпечкой.
Я прочитал предыдущие ответы на подобные вопросы, но решения, похоже, здесь не применяются.

Я не могу испечь, потому что полученная ошибка: Database connection “Mysql” is missing, or could not be created

Если я запустил which php то PHP-это правильный путь в MAMP.

Если я проверю модули PDO:

 php -i | grep "PDO" PDO PDO support => enabled PDO drivers => sqlite, pgsql, mysql PDO Driver for MySQL => enabled PDO Driver for PostgreSQL => enabled PDO Driver for SQLite 3.x => enabled 

Мое приложение (или то, что я до него доделал до сих пор) не имеет проблем с подключением к базе данных.

Все ответы в Интернете указывают на то, что PDO не включен или неправильный путь для PHP, но ни один из них не применяется в моем случае.

Solutions Collecting From Web of "Ошибка CakePHP Bake Shell: соединение с базой данных «Mysql» отсутствует или не может быть создано"

Возможно, неправильное имя пользователя / пароль или имя с ошибкой. У меня когда-то была база данных (имя), начинающаяся с пробела.

Вы можете проверить подключение к базе данных с помощью простого PHP, см .

Другое решение (Mac и MAMP) заключается в обновлении подключения к базе данных HOST. Я указал localhost и получил это сообщение об ошибке. Когда я обновил хост до 127.0.0.1 торт смог установить соединение.

Метод symlink, описанный cfkane, также должен решить эту проблему.

Я, наконец, узнал, в чем проблема, по крайней мере для меня: В database.php я указал:

 'encoding' => 'utf-8' 

в то время как:

 'encoding' => 'utf8' 

было бы намного лучше!

Чтобы сэкономить время для пользователей, я предлагаю, чтобы обработчик исключений мог отображать полное сообщение об ошибке из PDO. Вот мой патч:

 --- a/lib/Cake/Error/exceptions.php +++ b/lib/Cake/Error/exceptions.php @@ -378,7 +378,7 @@ class MissingDatabaseException extends CakeException { */ class MissingConnectionException extends CakeException { - 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"; public function __construct($message, $code = 500) { if (is_array($message)) { 

Результат:

 [default] > Error: Database connection "Mysql" is missing, or could not be created: SQLSTATE[42000] [1115] Unknown character set: 'utf' #0 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/Datasource/DboSource.php(262): Mysql->connect() 

У меня была эта проблема при использовании MAMP в MacOS.

Из командной строки мне пришлось запустить этот sudo

sudo mkdir / var / mysql

Тогда этот

sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock/var/mysql/mysql.sock

Затем, когда я снова запустил команду испечь торт, все сработало.

Найдено, что здесь: http://www.mojowill.com/developer/quick-tip-cakephp-baking-and-mamp/

Я столкнулся с той же проблемой, проверял поддержку PDO так же, как и тот же результат.

Следующий скрипт (который я написал) может помочь убедиться, что наши настройки в порядке:

 <?php include("../new-project/app/Config/database.php"); $config= new DATABASE_CONFIG(); $name = 'default'; $settings=$config->{$name}; $dsn = 'mysql:dbname='.$settings['database'].';host='.$settings['host']; $user = $settings['login']; $password = $settings['password']; try { $dbh = new PDO($dsn, $user, $password); echo "Connection succeeded with dsn: ". $dsn . "\n"; $sql = 'SELECT id, title FROM posts'; echo "Here is the contents of the table `posts:"; foreach ($dbh->query($sql) as $row) { print $row['id'] . "\t" . $row['title'] . "\n"; } } catch (PDOException $e) { echo 'PDO error: ' . $e->getMessage(); } ?> в <?php include("../new-project/app/Config/database.php"); $config= new DATABASE_CONFIG(); $name = 'default'; $settings=$config->{$name}; $dsn = 'mysql:dbname='.$settings['database'].';host='.$settings['host']; $user = $settings['login']; $password = $settings['password']; try { $dbh = new PDO($dsn, $user, $password); echo "Connection succeeded with dsn: ". $dsn . "\n"; $sql = 'SELECT id, title FROM posts'; echo "Here is the contents of the table `posts:"; foreach ($dbh->query($sql) as $row) { print $row['id'] . "\t" . $row['title'] . "\n"; } } catch (PDOException $e) { echo 'PDO error: ' . $e->getMessage(); } ?> 

И он отлично работает:

 mich@dennet:~/www/learn/cakePHP/tools$ php test-pdo.php Connection succeeded with dsn: mysql:dbname=test;host=localhost Here is the contents of the table `posts:1 The title 3 Title strikes back 4 Once again is back 

FYI, вот информация о версии:

 mich@dennet:~/www/learn/cakePHP/tools$ php --version PHP 5.4.9-4ubuntu2.3 (cli) (built: Sep 4 2013 19:32:25) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.3.0dev, Copyright (c) 2002-2012, by Derick Rethans 

Будет ли проблема с путями? Вот мое испеченное взаимодействие:

 mich@dennet:~/www/learn/cakePHP/new-project$ /usr/local/bin/cake -app /home/mich/www/learn/cakePHP/new-project/app bake Welcome to CakePHP v2.4.1 Console --------------------------------------------------------------- App : app Path: /home/mich/www/learn/cakePHP/new-project/app/ ... What would you like to Bake? (D/M/V/C/P/F/T/Q) > m --------------------------------------------------------------- Bake Model Path: /home/mich/www/learn/cakePHP/new-project/app/Model/ --------------------------------------------------------------- Use Database Config: (default/forbaking) [default] > Error: Database connection "Mysql" is missing, or could not be created. #0 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/Datasource/DboSource.php(262): Mysql->connect() #1 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/ConnectionManager.php(107): DboSource->__construct(Array) #2 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(927): ConnectionManager::getDataSource('default') #3 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(864): ModelTask->getAllTables(NULL) #4 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(953): ModelTask->listAll(NULL) #5 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(205): ModelTask->getName() #6 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(93): ModelTask->_interactive() #7 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/BakeShell.php(111): ModelTask->execute() #8 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Shell.php(435): BakeShell->main() #9 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(210): Shell->runCommand(NULL, Array) #10 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(68): ShellDispatcher->dispatch() #11 /usr/local/share/cakePHP/cakephp/app/Console/cake.php(37): ShellDispatcher::run(Array) #12 {main} , mich@dennet:~/www/learn/cakePHP/new-project$ /usr/local/bin/cake -app /home/mich/www/learn/cakePHP/new-project/app bake Welcome to CakePHP v2.4.1 Console --------------------------------------------------------------- App : app Path: /home/mich/www/learn/cakePHP/new-project/app/ ... What would you like to Bake? (D/M/V/C/P/F/T/Q) > m --------------------------------------------------------------- Bake Model Path: /home/mich/www/learn/cakePHP/new-project/app/Model/ --------------------------------------------------------------- Use Database Config: (default/forbaking) [default] > Error: Database connection "Mysql" is missing, or could not be created. #0 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/Datasource/DboSource.php(262): Mysql->connect() #1 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/ConnectionManager.php(107): DboSource->__construct(Array) #2 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(927): ConnectionManager::getDataSource('default') #3 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(864): ModelTask->getAllTables(NULL) #4 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(953): ModelTask->listAll(NULL) #5 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(205): ModelTask->getName() #6 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(93): ModelTask->_interactive() #7 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/BakeShell.php(111): ModelTask->execute() #8 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Shell.php(435): BakeShell->main() #9 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(210): Shell->runCommand(NULL, Array) #10 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(68): ShellDispatcher->dispatch() #11 /usr/local/share/cakePHP/cakephp/app/Console/cake.php(37): ShellDispatcher::run(Array) #12 {main} 

Я также пробовал:

 mich@dennet:/usr/local/share/cakePHP/cakephp$ app/Console/cake bake 

без каких-либо успехов.

Теперь я подозреваю, что сам Datasource …

НТН

Мишель

Просто для того, чтобы помочь пользователям Ubuntu : у меня была такая же ошибка в моей машине ubuntu 13.10 с новейшим xampp, загруженным прямо из apachefriends. Как итог:

Найти сокет, который создает 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 »отсутствует или не может быть создано ».

смените login => 'на пользователя, созданного при настройке базы данных'. Просто убедитесь, что конфигурация db отражает точно такие же параметры, которые используются при создании базы данных, и все должно быть в порядке.