web-dev-qa-db-fra.com

La connexion à la base de données CakePHP "Mysql" est manquante ou n'a pas pu être créée

Il y a eu plusieurs autres articles à ce sujet, mais aucune des réponses ne semblait fonctionner pour moi.

Lorsque j'accède à la page CakePHP sur ma machine locale, il y a une erreur:

Cake n'est pas capable de se connecter à la base de données. Connexion à la base de données "Mysql" est manquant ou n'a pas pu être créé.

Lorsque je lance ce code utile dans mon home.ctp, je reçois la réponse suivante:

Error !: SQLSTATE [42000] [1049] Base de données inconnue 'test'

Cependant, mon Users/Ben/Sites/myapp/app/Config/database.php ressemble à ceci (je règle MAMP pour rechercher la racine du document dans Users/Ben/Sites):

<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'Host' => 'localhost',
        'login' => 'Ben',
        'password' => 'mypass',
        'database' => 'CV',
    );
}

J'ai créé un utilisateur mysql appelé Ben avec le mot de passe mypass et créé une base de données appelée CV sous celle-ci. De plus, je ne trouve nulle part la mention d’une base de données test. Aidez-moi?

29
Ben Caine

En fin de compte, j'ai créé une table dans ma base de données, mais elle ne contenait aucune donnée.

Pour que CakePHP reconnaisse la connexion MySql, il doit y avoir une table avec des données.

0
Ben Caine

Essayez d'ajouter la prise:

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
47
Domingo C.

Une alternative à unix_socket (en particulier pour les utilisateurs d’OS X) consiste à remplacer localhost par 127.0.0.1

Serait comme suit:

public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'Host' => '127.0.0.1',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database-name',
                'prefix' => '',
                'encoding' => 'utf8',
        );
17
enagra

Éditez php.ini et ajoutez:

extension=php_pdo_mysql.dll 

Puis redémarrez votre serveur Web 

9
King Jk

Sur Mac, en utilisant MAMP comme plate-forme de développement, la solution appropriée pour Cake consiste à utiliser la solution Domingo Casarrubio.

Ajoutez le paramètre unix_socket à vos configurations de base de données.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
8
DecoMartins

J'ai remarqué que vous aviez posé cette question il y a un an et que vous l'auriez probablement déjà résolue. Cependant, pour ceux qui rencontrent les mêmes problèmes lorsqu'ils tentent d'installer CakePHP sur XAMPP, il suffit de changer le 'login' en 'root', c'est-à-dire le login par défaut de XAMPP, et de laisser le 'mot de passe' comme '', c'est-à-dire blanc. Le code complet dans votre fichier database.php devrait ressembler à ceci:

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'Host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'ckblog',//replace with your own database name
    'prefix' => '',
    //'encoding' => 'utf8',
);

C'est tout.

5
Brajinder Singh

Cette erreur peut également être provoquée si votre utilisateur de la base de données de connexion ne dispose pas des privilèges appropriés. Je pense que vous n’avez besoin que d’un minimum de INSERT, SELECT, UPDATE et DELETE.

Vérifiez toujours le nom d'utilisateur/mot de passe et les privilèges de l'utilisateur en premier car CakePHP donnera probablement une erreur de connexion à la base de données vague pour l'un ou l'autre.

5
Scott

Il se peut que le support mysql PDO soit manquant.

en tant que root (ou en utilisant Sudo):

apt-get install php5-mysql
2
Mike Rose

J'ai eu le même problème et j'ai finalement découvert que CakePhp n'acceptait pas d'utiliser un utilisateur avec un mot de passe, même si cet utilisateur avait été créé dans PHPMyAdmin. Je devais utiliser l'utilisateur 'root' sans mot de passe.

J'ai découvert ceci après avoir apporté les modifications suivantes au fichier /lib/Cake/Error/exceptions.php .

La ligne d'origine:

protected $_messageTemplate = 'Database connection "%s" is missing, or could not be created.';

est changé en cela à la place:

protected $_messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n    %s";

Cela vous donnera la raison du problème afin que vous puissiez changer la cause correctement.

2
user3834255

Parce que, pâtisserie utilise un socket Unix pour se connecter à la base de données
de sorte que vous ayez besoin d'ajouter unix_socket pour la chaîne de connexion.
Vous devez confirmer l’emplacement qui stocke mysql.sock dans WAS
Exemple: dans mon cas, j'utilise xampp sur MACOS 10.11.
(éditer le fichier 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’
);

Enfin, c'est du travail pour moi!

0
Quy Le

C'est ton modèle. Ouvrez ça et il doit y avoir la ligne suivante

public $useDbConfig = 'local';

Ceci écrase la configuration globale et la redéfinit sur local

0
Tanvir Gaus

Juste pour aider Ubuntu users out: J'ai eu la même erreur dans ma machine Ubuntu 13.10 avec le dernier xampp téléchargé directement d’apachefriends. J'ai essayé la plupart des éléments de chaque message que j'ai pu trouver à propos de cette erreur, mais pas ceux spécifiques à Mac… .. À la fin, le correctif s'est avéré identique à la réponse choisie ici:

Trouvez le socket créé par mysqld pour que les programmes se connectent à:

user@Host /opt$ find . -name mysql.sock
/opt/lampp/var/mysql/mysql.sock

ajoutez-le à votre fichier de configuration de la base de données cakePHP (cakePHP) /app/Config/database.php

'unix_socket' => '/opt/lampp/var/mysql/mysql.sock'

Pour moi, cela a finalement abouti à ce que mes commandes de gâteau puissent être exécutées sans "Erreur: La connexion à la base de données" Mysql "est manquante ou n'a pas pu être créée.".

0
FaustoW

Vous devrez peut-être créer la table dans votre fichier php ... Ouvrez phpMyAdmin et vérifiez que leur base de données CV existe.

0
Dragonman117

Je rencontre ce problème depuis la mise à niveau vers OSX Yosemite et l’insertion de la ligne suivante a été le bon choix:

 'unix_socket' => '/tmp/mysql.sock'
0
paulleephp

Je me suis battu avec tout ce week-end et l'ai finalement résolu. Il s'avère que le fichier php.ini pointe vers un "répertoire d'extensions" non existant. Créez un fichier phpinfo () et examinez la valeur de ce champ: extensions_dir

J'ai remarqué que dans le dossier mamp php installed il y a un dossier no-debug-non-zts-20131226, qui est différent de la valeur affichée dans phpinfo (). Ce que j'ai fait était de cloner ce dossier et de changer le nom en la valeur de phpinfo (). Vous pourriez probablement modifier le fichier php.ini mais je ne voulais pas.

Je ne sais pas si vous avez résolu votre problème, mais je le publie parce que mon problème était différent et que Google m'a emmené ici. J'espère donc pouvoir aider les futurs utilisateurs de Google ayant un problème similaire.

J'espère que cela t'aides.

0
Chuy

J'ai essayé d'épisser le code de l'exemple 2 de http://php.net/manual/en/pdo.connections.php dans /app/View/Pages/home.ctp. Je devais corriger les arguments du constructeur PDO et changer le nom de la table dans la requête. L'exemple de code 2 a renvoyé l'erreur "Erreur!: Pilote introuvable". Sur la base de la réponse de King Jk, je tentais de modifier le fichier php.ini lorsque je commençais à me demander où un php_pdo_mysql.so pourrait vivre. http://php.net/pdo_mysql montre comment il a été compilé dans le cadre de PHP via l'option --with-pdo-mysql à configurer. La recompilation a résolu mon problème. Remarque Je travaille sur un système Ubuntu 12.10 avec PHP 5.5.9 et Apache Webserver 2.4.6.

0
jocassid

Dans mon cas, c'était parce que la base de données n'existait pas. Je pensais que ./app/Console/cake schema create le créerait, mais ce n’est pas le cas. Le créer avec create database <database name> dans mysql a fait l'affaire (même si j'avais déjà attribué des privilèges).

0
Tyler Collier

Si vous êtes sur Godaddy (ou sur tout autre hébergement mutualisé d'ailleurs), ils peuvent limiter les connexions sortantes aux ports 80 et 443 uniquement.

0
aexl