Intereting Posts
Что вызывает «Невозможно выделить память для пула» в PHP? Повторный вызов тайм-аута сеанса PHP? Загружать данные в прокрутку вверх, как в чате, в чате php / Codeigniter- Как сравнивать только дату, исключая время PHP __autoload () с пространством имен POST из XMLHttp с параметрами PHP Перемещение файла сопоставления конфигурации в XML, но как создать динамический XPATH phpmyadmin отображает код, а не веб-страницу Последствия отключения session.cookie_secure в PHP Соглашение об именах: единственное число против множественного числа для классов, описывающих объекты в PHP Библиотека PHP OpenID, которая позволяет facebook / openid / twitter и т. Д .; Есть ли риск запуска file_put_contents () в том же файле из разных потоков PHP? Пройдите много дополнительных параметров для маршрута в Laravel 4 Как подождать перезагрузки страницы при тестировании интеграции Laravel PHP получает фактический максимальный размер загрузки

Соединение с базой данных 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 базы данных где угодно. Помогите?

Попробуйте добавить сокет:

 '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 () и посмотрите на значение этого поля: extensions_dir

Я заметил, что в установленной папке 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.