2013-07-30 20 views
7

Ho un problema qui con la cottura.
Ho letto le risposte precedenti a domande simili, ma le soluzioni sembrano non essere applicabili qui.Errore Cake Bake Shell: la connessione al database "Mysql" manca o non è possibile creare

non posso cuocere perché l'errore che ricevo è: Database connection “Mysql” is missing, or could not be created

Se corro which php il PHP sta leggendo è il percorso corretto all'interno di MAMP.

Se controllo i moduli DOP:

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 

La mia domanda (o quello che ho completato su di esso fino ad ora) non ha problemi di connessione al database.

Tutte le risposte in tutto il punto Web a PDO non abilitato, o il percorso errato per PHP, ma nessuno di quelli si applicano nel mio caso.

risposta

6

Forse un nome utente o una password errati o un nome di database errato. Una volta avevo un database (nome) che iniziava con uno spazio.

Si consiglia di verificare la connessione al database utilizzando semplicemente PHP, see.

+0

Sei un vero toccasana - Ho una connessione FTP in netbeans, e la connessione stava ancora puntando al mio database online invece del mio locale (come richiesto da bake). Grazie amico ... pensavo che il problema fosse più profondo di quello. –

+0

Oppure un altro database, ho fatto una copia del database e ho ricevuto quell'errore. Questo errore è dovuto a una configurazione errata (non aggiornata, errata, ...). –

0

Sono di fronte allo stesso problema, ho verificato il supporto PDO allo stesso modo, lo stesso risultato.

il seguente script (che ho scritto) potrebbe aiutare per assicurarsi che le nostre impostazioni sono ok:

<?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(); 
} 

?> 

e funziona benissimo:

[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 

Cordiali saluti, ecco i dettagli della versione:

[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 

Sarebbe un problema con i percorsi? Ecco la mia interazione cuocere:

[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} 

Ho anche provato:

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

senza più successo.

Ora ho il sospetto che l'origine dati in sé ...

HTH

Michelle

3

ho finalmente scoperto qual era il problema, almeno per me: In database.php, ho specificato:

'encoding' => 'utf-8' 

considerando quanto segue:

'encoding' => 'utf8' 

sarebbe molto meglio!

Per risparmiare tempo agli utenti, suggerisco che il gestore di eccezioni potrebbe visualizzare il messaggio di errore completo da PDO.Qui è la mia 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)) { 

Il risultato è:

[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

ho avuto questo problema durante l'utilizzo di MAMP su MacOS.

Dal prompt dei comandi, ho dovuto correre questo sudo

sudo mkdir /var/mysql

allora questo

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

Poi quando mi sono imbattuto di nuovo il mio comando cuocia, tutto ha funzionato.

scoperto che qui: http://www.mojowill.com/developer/quick-tip-cakephp-baking-and-mamp/

5

Un'altra soluzione (Mac e MAMP) è quello di aggiornare il HOST connessione al database. Ho specificato localhost e ho ricevuto questo messaggio di errore. Quando ho aggiornato l'host alla torta 127.0.0.1 è stato possibile effettuare la connessione.

Il metodo di collegamento simbolico descritto da cfkane deve inoltre risolvere il problema.

+0

È stato localhost vs 127.0.0.1 (utilizzare l'IP, oppure specificare un socket unix) per me. La cosa bizzarra è che funzionava bene con localhost per un po '. Non so cosa potrei aver cambiato. –

+0

ha funzionato per me con XAMPP e MacOS X - è entrato in database.php e ha cambiato localhost in "127.0.0.1" – ChicagoSky

0

Proprio per aiutare Ubuntu utenti fuori: Ho avuto lo stesso errore nella mia macchina Ubuntu 13.10 con la più recente XAMPP scaricata direttamente da apachefriends. In sintesi:

Trovare il socket che mysqld crea per i programmi di collegarsi a:

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

aggiungerlo al file di configurazione del database cakePHP (cakePHP) /app/Config/database.php

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

Per me, questo ha comportato la possibilità di eseguire i comandi della torta senza l'errore ": Connessione al database" Mysql "mancante o non possibile.".

0

cambia login => 'per l'utente creato durante l'impostazione del database'. Assicurati solo che la configurazione del db rifletta esattamente gli stessi parametri utilizzati durante la creazione del database e che tutto dovrebbe andare bene.