web-dev-qa-db-de.com

Die CakePHP-Datenbankverbindung "Mysql" fehlt oder konnte nicht erstellt werden

Es gab mehrere andere Beiträge dazu, aber keine der Antworten schien für mich zu funktionieren.

Wenn ich auf meinem lokalen Rechner zur CakePHP-Seite navigiere, gibt es einen Fehler:

Cake kann NICHT mit der Datenbank verbunden werden. Datenbankverbindung "Mysql" fehlt oder konnte nicht erstellt werden.

Wenn ich diesen hilfreichen Code in meinem home.ctp starte, erhalte ich die folgende Antwort:

Fehler !: SQLSTATE [42000] [1049] Unbekannte Datenbank 'test'

Mein Users/Ben/Sites/myapp/app/Config/database.php sieht jedoch so aus (ich habe MAMP so eingestellt, dass es in Users/Ben/Sites nach dem Dokumentstamm sucht):

<?php
class DATABASE_CONFIG {

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

Ich habe einen MySQL-Benutzer mit dem Namen Ben mit dem Kennwort mypass und eine Datenbank mit dem Namen CV erstellt. Außerdem kann ich nirgendwo eine test-Datenbank erwähnen. Hilfe?

29
Ben Caine

Am Ende tat es mir so, dass ich eine Tabelle in meiner Datenbank erstellt hatte, in der sich jedoch keine Daten befanden.

Damit CakePHP die MySql-Verbindung erkennt, muss eine Tabelle mit Daten darin sein.

0
Ben Caine

Versuchen Sie, den Sockel hinzuzufügen:

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

Eine Alternative zu unix_socket (insbesondere für Benutzer von OS X) ist, localhost durch 127.0.0.1 zu ersetzen.

Wäre wie folgt:

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

Bearbeiten Sie php.ini und fügen Sie Folgendes hinzu:

extension=php_pdo_mysql.dll 

Starten Sie anschließend Ihren Webserver neu 

9
King Jk

Unter Mac verwenden Sie MAMP als Entwicklungsplattform. Für Kuchen ist die richtige Lösung die Lösung von Domingo Casarrubio.

Fügen Sie den Parameter unix_socket zu Ihren Datenbankkonfigurationen hinzu.

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

Mir ist aufgefallen, dass Sie dies vor einem Jahr gefragt hatten, und wahrscheinlich hätte es das Problem inzwischen gelöst. Wenn Sie jedoch bei der Installation von CakePHP auf XAMPP die gleichen Probleme haben, müssen Sie lediglich das Login in root ändern, dh das Standard-Login von XAMPP, und das 'Passwort' als '' belassen leer. Der vollständige Code in Ihrer database.php-Datei sollte folgendermaßen aussehen:

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

Das ist es.

5
Brajinder Singh

Dieser Fehler kann auch verursacht werden, wenn der Benutzer der Verbindungsdatenbank nicht über die erforderlichen Berechtigungen verfügt. Ich glaube, Sie benötigen nur ein Minimum an INSERT, SELECT, UPDATE und DELETE.

Überprüfen Sie immer zuerst Benutzername/Passwort und die Benutzerberechtigungen, da CakePHP höchstwahrscheinlich einen vagen Datenbankverbindungsfehler für beide verursacht.

5
Scott

Es kann sein, dass die Unterstützung für MySQL-PDOs fehlt.

als root (oder mit Sudo):

apt-get install php5-mysql
2
Mike Rose

Ich hatte das gleiche Problem und stellte schließlich fest, dass CakePhp nicht akzeptierte, dass ich einen Benutzer mit einem Kennwort verwendet hatte, selbst wenn dieser Benutzer in PHPMyAdmin erstellt wurde. Ich musste den Benutzer 'root' ohne Passwort verwenden.

Ich fand das heraus, nachdem ich die Datei-lib/Cake/Error/exceptions.php geändert habe.

Die ursprüngliche Linie:

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

wird stattdessen in dieses geändert:

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

Dadurch erhalten Sie die Ursache für das Problem, sodass Sie die Ursache ordnungsgemäß ändern können.

2
user3834255

Denn Cake Bake verwendet einen Unix-Socket für die Verbindung zur Datenbank
Sie müssen also unix_socket für die Verbindungszeichenfolge hinzufügen.
Sie müssen den Speicherort bestätigen, an dem mysql.sock in WAS gespeichert wird
Beispiel: In meinem Fall verwende ich xampp unter MACOS 10.11
(editiere die Datei 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’
);

Endlich ist es Arbeit für mich!

0
Quy Le

Es ist dein Modell. Öffnen Sie das und es muss die folgende Zeile sein

public $useDbConfig = 'local';

Dies überschreibt die globale Konfiguration und setzt sie auf lokal zurück

0
Tanvir Gaus

Nur um Ubuntu Benutzern zu helfen: Ich hatte den gleichen Fehler in meinem Ubuntu 13.10-Rechner mit dem neuesten Xampp, der direkt von Apachfreunden heruntergeladen wurde. Ich habe die meisten Sachen in jedem Beitrag ausprobiert, die ich über diesen Fehler finden konnte, aber nicht die Mac-spezifischen Sachen ... Am Ende war die Lösung genau dasselbe wie die gewählte Antwort hier:

Suchen Sie nach dem Socket, den mysqld für Programme erstellt, mit denen Sie eine Verbindung herstellen können:

[email protected] /opt$ find . -name mysql.sock
/opt/lampp/var/mysql/mysql.sock

fügen Sie es Ihrer cakePHP-Datenbankkonfigurationsdatei (cakePHP) /app/Config/database.php hinzu

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

Für mich führte dies letztendlich dazu, dass meine Cake-Befehle ausgeführt werden konnten, ohne dass "Error: Datenbankverbindung" Mysql "fehlt oder nicht erstellt werden konnte.".

0
FaustoW

Möglicherweise müssen Sie die Tabelle in Ihrer PHP-Datei erstellen ... Öffnen Sie phpMyAdmin und prüfen Sie, ob der Datenbank-CV vorhanden ist.

0
Dragonman117

Dieses Problem hatte ich seit dem Upgrade auf OSX Yosemite und das Einfügen der folgenden Zeile für mich:

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

Ich habe das ganze Wochenende damit zu kämpfen gehabt und es endlich gelöst. Es stellt sich heraus, dass die php.ini auf ein nicht vorhandenes "Erweiterungsverzeichnis" verweist. Erstellen Sie eine phpinfo () -Datei und überprüfen Sie den Wert dieses Feldes: extensions_dir

Mir ist aufgefallen, dass sich im Ordner mamp php install ein no-debug-non-zts-20131226-Ordner befindet, der sich von dem in phpinfo () angezeigten Wert unterscheidet. Ich habe diesen Ordner geklont und den Namen in den Wert von phpinfo () geändert. Wahrscheinlich konnten Sie die php.ini-Datei ändern, aber ich wollte es nicht.

Ich weiß nicht, ob Sie Ihr Problem gelöst haben, aber ich poste dies, weil mein Problem anders war und Google mich hierher gebracht hat. Ich hoffe, zukünftigen Googlern zu helfen, die ein ähnliches Problem haben.

Hoffe das hilft.

0
Chuy

Ich habe versucht, den Code aus Beispiel 2 von http://php.net/manual/de/pdo.connections.php in /app/View/Pages/home.ctp zu spleißen. Ich musste die Argumente des PDO-Konstruktors korrigieren und den Namen der Tabelle in der Abfrage ändern. Der Beispielcode 2 hat den Fehler "Fehler !: Treiber nicht gefunden" zurückgegeben. Basierend auf der Antwort von King Jk versuchte ich, die php.ini zu ändern, als ich anfing, mich zu fragen, wo eine php_pdo_mysql.so leben könnte. http://php.net/pdo_mysql zeigte, wie es im Rahmen von PHP über die zu konfigurierende Option --with-pdo-mysql kompiliert wurde. Neukompilieren hat mein Problem behoben. Hinweis Ich arbeite an einem Ubuntu 12.10-System mit PHP 5.5.9 und Apache Webserver 2.4.6

0
jocassid

In meinem Fall lag es daran, dass die Datenbank nicht existierte. Ich hatte erwartet, dass ./app/Console/cake schema create es erstellen würde, aber nicht. Das Erstellen mit create database <database name> in mysql erledigte den Trick (obwohl ich bereits Privilegien vergeben hatte).

0
Tyler Collier

Wenn Sie sich bei Godaddy (oder einem anderen Shared Hosting für diese Angelegenheit) befinden, beschränken sie möglicherweise nur ausgehende Verbindungen zu den Ports 80 und 443.

0
aexl