2013-07-30 12 views
7

Ich habe ein Problem mit dem Backen.
Ich habe die vorherigen Antworten zu ähnlichen Fragen gelesen, aber die Lösungen scheinen hier nicht zu gelten.CakePHP Bake Shell Fehler: Datenbankverbindung "Mysql" fehlt oder konnte nicht erstellt werden

Ich kann nicht backen, da die Fehler, die ich erhalten ist: Database connection “Mysql” is missing, or could not be created

Wenn ich which php laufen die PHP zu lesen ist, ist der richtige Weg in MAMP.

Wenn ich die PDO-Module überprüfen:

php -i | grep "PDO" 
PDO 
PDO support => enabled 
PDO drivers => sqlite, pgsql, mysql 
PDO Driver for MySQL => enabled 
PDO Driver for PostgreSQL => enabled 
PDO Driver for SQLite 3.x => enabled 

Meine Anwendung (oder das, was ich auf sie abgeschlossen haben bisher) hat keine Probleme mit der Datenbank verbindet.

Alle Antworten im Internet verweisen darauf, dass PDO nicht aktiviert ist, oder der falsche Pfad für PHP, aber in meinem Fall trifft das nicht zu.

Antwort

6

Möglicherweise ein falscher Benutzername/ein falsches Kennwort oder ein falsch geschriebener Datenbankname. Ich hatte einmal eine Datenbank (Name), die mit einem Leerzeichen anfing.

Sie können die Datenbankverbindung mit PHP, see überprüfen.

+0

Sie sind ein Lebensretter - Ich habe eine FTP-Verbindung in Netbeans, und die Verbindung zeigte immer noch auf meine Online-Datenbank statt meiner lokalen (wie von Bake erforderlich). Danke Kumpel ... Ich dachte, das Problem wäre tiefer geroutet. –

+0

Oder eine andere Datenbank, ich habe eine Kopie der Datenbank erstellt und ich habe diesen Fehler bekommen. Dieser Fehler ist auf eine fehlerhafte (nicht aktualisierte, falsch geschriebene) Konfiguration zurückzuführen. –

0

Ich stehe vor dem gleichen Problem, überprüfte PDO-Unterstützung auf die gleiche Weise, das gleiche Ergebnis.

Das folgende Skript (das ich geschrieben habe) könnte helfen, unsere Einstellungen sind in Ordnung, um sicherzustellen:

<?php 
include("../new-project/app/Config/database.php"); 
$config= new DATABASE_CONFIG(); 

$name = 'default'; 

$settings=$config->{$name}; 
$dsn = 'mysql:dbname='.$settings['database'].';host='.$settings['host']; 
$user = $settings['login']; 
$password = $settings['password']; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
    echo "Connection succeeded with dsn: ". $dsn . "\n"; 
    $sql = 'SELECT id, title FROM posts'; 
    echo "Here is the contents of the table `posts:"; 
    foreach ($dbh->query($sql) as $row) { 
     print $row['id'] . "\t" . $row['title'] . "\n"; 
    } 
} catch (PDOException $e) { 
    echo 'PDO error: ' . $e->getMessage(); 
} 

?> 

Und es funktioniert:

[email protected]:~/www/learn/cakePHP/tools$ php test-pdo.php 
Connection succeeded with dsn: mysql:dbname=test;host=localhost 
Here is the contents of the table `posts:1 The title 
3 Title strikes back 
4 Once again is back 

FYI, hier sind Versionsdetails:

[email protected]:~/www/learn/cakePHP/tools$ php --version 
PHP 5.4.9-4ubuntu2.3 (cli) (built: Sep 4 2013 19:32:25) 
Copyright (c) 1997-2012 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies 
    with Xdebug v2.3.0dev, Copyright (c) 2002-2012, by Derick Rethans 

Wäre es ein Problem mit Pfaden? Hier ist meine backen Interaktion:

[email protected]:~/www/learn/cakePHP/new-project$ /usr/local/bin/cake -app /home/mich/www/learn/cakePHP/new-project/app bake 

Welcome to CakePHP v2.4.1 Console 
--------------------------------------------------------------- 
App : app 
Path: /home/mich/www/learn/cakePHP/new-project/app/ 
... 
What would you like to Bake? (D/M/V/C/P/F/T/Q) 
> m 
--------------------------------------------------------------- 
Bake Model 
Path: /home/mich/www/learn/cakePHP/new-project/app/Model/ 
--------------------------------------------------------------- 
Use Database Config: (default/forbaking) 
[default] > 
Error: Database connection "Mysql" is missing, or could not be created. 
#0 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/Datasource/DboSource.php(262): Mysql->connect() 
#1 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/ConnectionManager.php(107): DboSource->__construct(Array) 
#2 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(927): ConnectionManager::getDataSource('default') 
#3 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(864): ModelTask->getAllTables(NULL) 
#4 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(953): ModelTask->listAll(NULL) 
#5 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(205): ModelTask->getName() 
#6 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/Task/ModelTask.php(93): ModelTask->_interactive() 
#7 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Command/BakeShell.php(111): ModelTask->execute() 
#8 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/Shell.php(435): BakeShell->main() 
#9 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(210): Shell->runCommand(NULL, Array) 
#10 /usr/local/share/cakePHP/cakephp/lib/Cake/Console/ShellDispatcher.php(68): ShellDispatcher->dispatch() 
#11 /usr/local/share/cakePHP/cakephp/app/Console/cake.php(37): ShellDispatcher::run(Array) 
#12 {main} 

ich auch versucht:

[email protected]:/usr/local/share/cakePHP/cakephp$ app/Console/cake bake 

ohne mehr Erfolg.

Jetzt nehme ich an der Datenquelle selbst ...

HTH

Michelle

3

ich endlich herausgefunden, was das Problem war, zumindest für mich: In database.php, I angegeben:

'encoding' => 'utf-8' 

während:

'encoding' => 'utf8' 

wäre viel besser!

Um den Benutzern Zeit zu sparen, schlage ich vor, dass der Ausnahmebehandler die vollständige Fehlermeldung von PDO anzeigen könnte.Hier ist mein Patch:

--- a/lib/Cake/Error/exceptions.php 
+++ b/lib/Cake/Error/exceptions.php 
@@ -378,7 +378,7 @@ class MissingDatabaseException extends CakeException { 
    */ 
class MissingConnectionException extends CakeException { 

-  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"; 

     public function __construct($message, $code = 500) { 
       if (is_array($message)) { 

Das Ergebnis ist:

[default] > 
Error: Database connection "Mysql" is missing, or could not be created: 
    SQLSTATE[42000] [1115] Unknown character set: 'utf' 
#0 /usr/local/share/cakePHP/cakephp/lib/Cake/Model/Datasource/DboSource.php(262): Mysql->connect() 
2

ich dieses Problem wurde, während auf MacOS mit MAMP.

an der Eingabeaufforderung, hatte ich diese sudo

sudo mkdir /var/mysql

Dann ist dieses ein

sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock/var/mysql/mysql.sock

dann laufen, wenn ich wieder meinen Kuchen backen Befehl lief, alles funktionierte.

das hier gefunden: http://www.mojowill.com/developer/quick-tip-cakephp-baking-and-mamp/

5

Eine andere Lösung (Mac und MAMP) ist Ihre Datenbankverbindung HOST zu aktualisieren. Ich hatte localhost angegeben und diese Fehlermeldung erhalten. Wenn ich den Host auf 127.0.0.1 aktualisiert Kuchen konnte die Verbindung herstellen.

Die Symlink-Methode, die von cfkane beschrieben wird, sollte auch das Problem ansprechen.

+0

Es war localhost vs 127.0.0.1 (benutze die IP oder sonst einen Unix Socket) für mich. Was seltsam ist, ist, dass es eine Weile mit Localhost funktionierte. Ich weiß nicht, was ich hätte ändern können. –

+0

dies funktionierte für mich mit XAMPP und MacOS X - ging in die Datenbank.php und änderte localhost zu '127.0.0.1' – ChicagoSky

0

Gerade Ubuntu Benutzer zu helfen: Ich hatte den gleichen Fehler in meiner ubuntu 13.10 Maschine mit der neuesten xampp direkt von Apache heruntergeladen. Als Zusammenfassung:

die Buchse finden, die eine Verbindung schafft für Programme mysqld:

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

fügen Sie ihn in Ihre CakePHP Datenbank-Konfigurationsdatei (CakePHP) /app/Config/database.php

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

Für mich führte dies schließlich dazu, dass meine Kuchenbefehle ausgeführt werden konnten, ohne dass "Fehler: Datenbankverbindung" Mysql "fehlt oder nicht erstellt werden konnte.".

0

ändern Sie Login => 'zu Ihrem Benutzer erstellt beim Einrichten der Datenbank'. Stellen Sie nur sicher, dass die Datenbank-Konfiguration genau die gleichen Parameter wiedergibt, die beim Erstellen der Datenbank verwendet wurden, und dass die Welt in Ordnung sein sollte.