2013-07-30 19 views
7

Mam problem z pieczeniem.
Czytałem poprzednie odpowiedzi na podobne pytania, ale rozwiązania wydają się tutaj nie mieć zastosowania.Błąd powłoki CakePHP: połączenie z bazą danych "Mysql" brakuje lub nie można go utworzyć

Nie mogę upiec ponieważ błąd zgłaszany jest: Database connection “Mysql” is missing, or could not be created

Jeśli biegnę which php PHP to czytanie jest poprawna ścieżka wewnątrz MAMP.

Gdybym sprawdzić moduły PDO:

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 

Moja aplikacja (lub co mam wypełniony na nim do tej pory) nie ma problemów z połączeniem do bazy danych.

Wszystkie odpowiedzi w sieci wskazują, że PDO nie jest włączone, lub niepoprawna ścieżka do PHP, ale żadna z nich nie ma zastosowania w moim przypadku.

Odpowiedz

6

Prawdopodobnie błędna nazwa użytkownika/hasło lub błędnie wpisana nazwa bazy danych. Miałem kiedyś bazę danych (imię i nazwisko) zaczynającą się spacją.

Możesz sprawdzić połączenie z bazą danych za pomocą zwykłego PHP, see.

+0

Jesteś ratownikiem - mam połączenie FTP w Netbeans, a połączenie wciąż wskazuje na moją bazę danych online zamiast mojej lokalnej (zgodnie z wymogami pieczenia). Dzięki kolego ... Pomyślałem, że problem jest głębszy. –

+0

Lub innej bazy danych, zrobiłem kopię bazy danych i dostałem ten błąd. Ten błąd jest spowodowany nieprawidłową (niezaktualizowaną, błędnie napisaną ...) konfiguracją. –

0

Mam do czynienia z tym samym problemem, sprawdzone wsparcie PDO w ten sam sposób, ten sam wynik.

następujący skrypt (to pisałem) może pomóc, aby upewnić się nasze ustawienia są 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(); 
} 

?> 

i działa prawidłowo:

[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, tutaj są szczegóły wersja:

[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 

Czy to byłby problem ze ścieżkami? Oto mój piec interakcja:

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

Próbowałem również:

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

bez dalszych sukcesów.

Teraz podejrzewam sam DataSource ...

HTH

Michelle

3

I w końcu okazało się, co było problemem, przynajmniej dla mnie: W database.php, ja określone:

'encoding' => 'utf-8' 

natomiast:

'encoding' => 'utf8' 

byłoby znacznie lepiej!

Aby zaoszczędzić czas użytkownikom, sugeruję, aby obsługa wyjątków mogła wyświetlić pełny komunikat o błędzie z PDO.Oto mój 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)) { 

Wynikiem jest:

[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

miałem ten problem podczas korzystania MAMP na MacOS.

W wierszu polecenia, musiałem uruchomić ten sudo

sudo mkdir /var/mysql

Wtedy ten

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

Wtedy kiedy wpadłem moje polecenie ciasto piec ponownie, wszystko działało.

Stwierdzili, że tutaj: http://www.mojowill.com/developer/quick-tip-cakephp-baking-and-mamp/

5

Innym rozwiązaniem (Mac i MAMP) jest zaktualizowanie hosta serwera bazy danych. Podałem localhost i otrzymałem ten komunikat o błędzie. Kiedy zaktualizowałem host do 127.0.0.1 ciasto było w stanie nawiązać połączenie.

Metoda dowiązania symbolicznego opisana przez cfkane powinna również rozwiązać problem.

+0

To był localhost vs 127.0.0.1 (użyj adresu IP lub podaj gniazdo unixowe). Dziwne jest to, że od jakiegoś czasu działało dobrze z localhostem. Nie wiem, co mogłem zmienić. –

+0

to działało dla mnie z XAMPP i MacOS X - przeszedł do database.php i zmienił localhost na '127.0.0.1' – ChicagoSky

0

Wystarczy pomóc użytkowników Ubuntu się: Miałem ten sam błąd w moim ubuntu 13.10 maszynie z najnowszej xampp pobranym bezpośrednio z Apachefriends. W skrócie:

znaleźć gniazdo że mysqld tworzy dla programów do łączenia się:

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

go dodać do pliku konfiguracyjnego bazy danych CakePHP (CakePHP) /app/Config/database.php

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

Dla mnie to w końcu spowodowało, że moje komendy z ciastami mogły zostać wykonane bez "Błąd: połączenie z bazą danych" Mysql "nie istnieje lub nie można go utworzyć".

0

zmiana login => 'na użytkownika utworzonego podczas konfigurowania bazy danych'. Po prostu upewnij się, że konfiguracja db odzwierciedla dokładnie te same parametry, które były używane podczas tworzenia bazy danych, a świat powinien być dobry.

Powiązane problemy