CakePHP 2 не может подключиться к базе данных MySQL - PullRequest
8 голосов
/ 08 октября 2011

Используя последнюю версию CakePHP 2.0 RC3, я пытаюсь подключиться к базе данных MySQL.Для этого я изменил файл database.php, присутствующий в каталоге app / config.

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

class DATABASE_CONFIG {

       public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => '',
        'database' => 'db_world',
        'prefix' => ''
       );

}

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

  • Пробовал с использованием пользователя 'root', а также создавал другого пользователя с необходимыми привилегиями.
  • Пробная подача127.0.0.1 вместо localhost
  • Проверено, что база данных подключалась с использованием обычного сценария php.

Обычный сценарий php для проверки подключения к базе данных выглядит так: -

<?php

   $connect = mysql_connect("127.0.0.1","root","") or die("Could not connect");
   mysql_select_db("db_world") or die("Could not find db");

   echo "hello world";

?>

Приведенный выше скрипт работает, что означает, что он не является проблемой со стороны MySQL.

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

Любые указатели для устранения проблемы будут полезны.

Ответы [ 7 ]

22 голосов
/ 08 октября 2011

CakePHP 2.0 использует PDO, а не mysql_connect, и я предполагаю, что расширение MySQL PDO не установлено.

Можете ли вы запустить следующий скрипт, чтобы проверить, можно ли создать соединение вручную?

$hostname = "localhost";
$username = "root";
$password = "";

try {
  $db = new PDO("mysql:host=$hostname;dbname=db_world", $username, $password);
  echo "Connected to database";
}
catch(PDOException $e) {
  echo $e->getMessage();
}
1 голос
/ 04 сентября 2013

Я тоже сталкиваюсь с этой проблемой.Это заняло у меня несколько часов, чтобы понять.Когда я запустил новое приложение CakePHP 2.0, я не смог подключиться к базе данных MySQL.

Я наконец-то понял, что вам нужно включить php_pdo_extension в php.ini.

Следующая ссылка поможет мне решить эту проблему

(http://www.cakephpexample.com/uncategorized/cakephp-missing-database-connection/)

1 голос
/ 13 октября 2012

Проверьте пароль, который вы дали! Я искал проблему в PDO около недели, а потом обнаружил, что мой пароль неверный !! Поэтому обратите на это внимание - ошибка будет той же.

1 голос
/ 29 марта 2012

Первый тест для расширения PDO Mysql с помощью:

var_dump( extension_loaded('pdo_mysql') );

Если значение false, для Windows просто добавьте эти строки в ваш PHP.INI:

extension=php_pdo.dll   /* not necessary for PHP v5.3+ */
extension=php_pdo_mysql.dll

Ссылка: http://www.php.net/manual/en/pdo.installation.php

0 голосов
/ 22 декабря 2016

Некоторые проекты CakePHP (такие как webzash) имеют свою собственную конфигурацию базы данных, которая переопределяет app/Config/Database.php. Например, в случае webzash соединение устанавливается в plugins/Webzash/Config/MasterConfig.php.

0 голосов
/ 21 марта 2013

В Windows вы должны загрузить последнюю версию WAMP, потому что CakePHP 2.x использует PDO и поддерживает только MySQL 4. Последняя версия Cake поддерживает 5.x и PHP 5.2.8 или выше.Не забудьте mod_rewrite, если хотите.

В Linux вы должны использовать apt-get или aptitude:

apt-get install apache2 mysql-server php5 ; apt-get install php5-mysql

, затем перезапустить / перезагрузить apache2

Наконец, не забудьте chmod -R 777 cakephp / app / tmp для кеширования и заполните поля доступа к вашей БД (app / Config / database.php)

0 голосов
/ 12 марта 2013

для кодирования и сообщений об ошибках:

try {
    $dns = 'mysql:host=localhost;dbname=db';
    $user = 'user';
    $psswrd = 'pass';
    // Options connection
    $options = array(
        PDO::MYSQL_ATTR_INIT_COMMAND    => "SET NAMES utf8",
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    );
    $connection = new PDO( $dns, $user, $psswrd, $options );

} catch ( Exception $e ) {
    echo "Connection impossible to MySQL : ", $e->getMessage();
    die();
}

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...