CakePHP Bake Shell Error: соединение с базой данных "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, но ни один из них не применим в моем случае.

7 ответов

Решение

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

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

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

Метод символьной ссылки, описанный 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/

Просто, чтобы помочь пользователям 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"отсутствует или не может быть создано".

Я сталкиваюсь с той же проблемой, проверял поддержку 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();
}

?>

И это прекрасно работает

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

К вашему сведению, вот детали версии:

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:/usr/local/share/cakePHP/cakephp$ app/Console/cake bake

без успеха.

Теперь я подозреваю, что сам источник данных...

НТН

Мишель

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

Другие вопросы по тегам