CakePHP Datenbankverbindung "Mysql" fehlt oder konnte nicht erstellt werden


Answers

Eine Alternative zu unix_socket (insbesondere für OS X- unix_socket ) ist es, 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',
        );
Question

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

Wenn ich auf meinem lokalen Computer zur CakePHP-Seite navigiere, liegt ein Fehler vor:

Cake kann sich NICHT mit der Datenbank verbinden. Die Datenbankverbindung "MySQL" fehlt oder konnte nicht erstellt werden.

Wenn ich diesen hilfreichen Code in meiner home.ctp ausführe, erhalte ich die folgende Antwort:

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

Allerdings sieht mein Users/Ben/Sites/myapp/app/Config/database.php aus (ich habe MAMP so eingestellt, dass er in Users / Ben / Sites nach dem Dokumentenstamm 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 namens Ben mit dem Kennwort mypass erstellt und eine Datenbank mit dem Namen CV . Darüber hinaus kann ich nirgendwo eine test finden. Hilfe?




Ich habe das ganze Wochenende damit zu kämpfen gehabt und es schließlich gelöst. Es stellt sich heraus, dass die php.ini auf ein nicht existierendes "extensions dir" verweist. Erstellen Sie eine phpinfo () Datei und schauen Sie sich den Wert dieses Feldes an:

Mir ist aufgefallen, dass es im Ordner mamp php installed einen Ordner no-debug-non-zts-20131226 gibt, der sich von dem in phpinfo () angezeigten Wert unterscheidet. Was ich tat, war, diesen Ordner zu klonen und den Namen auf den Wert von phpinfo () zu ändern. Wahrscheinlich könnten Sie die php.ini-Datei ändern, aber ich wollte nicht.

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

Hoffe das hilft.




Ich habe bemerkt, dass Sie dies vor einem Jahr gefragt haben und wahrscheinlich schon längst gelöst haben. Wenn Sie jedoch versuchen, CakePHP auf XAMPP zu installieren, müssen Sie lediglich die 'Anmeldung' in 'root' ändern, dh die Standardanmeldung von XAMPP, und das 'Passwort' als '' belassen, dh leer. Der vollständige Code in Ihrer Datei database.php sollte so 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.




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




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




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 zurück auf lokal




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

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

Die ursprüngliche Zeile:

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

wird stattdessen geändert:

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

Das gibt Ihnen den Grund für das Problem, damit Sie die Ursache ordnungsgemäß ändern können.




In meinem Fall lag es daran, dass die Datenbank nicht existierte. Ich habe erwartet, dass das Ausführen von ./app/Console/cake schema create , aber es nicht. Das Erstellen mit create database <database name> in mysql war der Trick (obwohl ich bereits Privilegien zugewiesen hatte).




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

extension=php_pdo_mysql.dll 

Starten Sie dann Ihren Webserver neu