2013-07-30 33 views
7

我在這裏有一個問題與烘烤。
我已閱讀以前對類似問題的回答,但解決方案似乎不適用於此。CakePHP Bake Shell錯誤:數據庫連接「Mysql」缺失或無法創建

我不會烤,因爲我收到的錯誤是:Database connection 「Mysql」 is missing, or could not be created

如果我運行which php它的閱讀PHP是中甲基苯丙胺的正確路徑。

如果我檢查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 

我的應用程序(或什麼我已經完成了它到目前爲止)具有連接數據庫沒有問題。

網絡上的所有答案都指向PDO未啓用,或PHP的路徑不正確,但這兩者都不適用於我的情況。

回答

6

也許是一個錯誤的用戶名/密碼或拼寫錯誤的數據庫名稱。我曾經有一個以空格開頭的數據庫(名稱)。

您可能需要使用普通的PHP,see來檢查數據庫連接。

+0

你是一個救生員 - 我在netbeans有一個FTP連接,並且連接仍然指向我的在線數據庫,而不是我的本地(按照烘焙的要求)。感謝隊友......我認爲這個問題比這個更深。 –

+0

或其他數據庫,我做了一個數據庫的副本,我得到了那個錯誤。此錯誤是由於錯誤(未更新,拼錯,...)配置造成的。 –

0

我面臨同樣的問題,檢查PDO支持同樣的方式,相同的結果。

以下腳本(即我寫的),可能有助於確保我們的設置就完成:

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

?> 

,它工作正常:

[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 

僅供參考,這裏有版本的詳細信息:

[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 

這是路徑問題嗎?這裏是我的烘烤互動:

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

我也試過:

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

沒有更多的成功。

現在我懷疑的數據源本身...

HTH

米歇爾

3

我終於發現了什麼問題,至少對我來說: 在database.php中,我指定:

'encoding' => 'utf-8' 

而:

'encoding' => 'utf8' 

會好很多!

爲了節省用戶的時間,我建議異常處理程序可以顯示來自PDO的完整錯誤消息。這裏是我的補丁:

--- 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)) { 

結果是:

[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

同時使用在MacOS MAMP我是有這個問題。

在命令提示符下,我只好跑這個須藤

sudo mkdir /var/mysql

那麼這一個

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

後來,當我再次跑到我的蛋糕烘焙命令,一切正常。

發現,這裏:http://www.mojowill.com/developer/quick-tip-cakephp-baking-and-mamp/

5

另一種解決方案(Mac和MAMP)是更新數據庫連接HOST。我指定了本地主機並收到此錯誤消息。當我更新主機到127.0.0.1蛋糕能夠進行連接。

cfkane描述的符號鏈接方法也應該解決這個問題。

+0

對我來說,它是localhost vs 127.0.0.1(使用IP,或者指定一個unix套接字)。奇怪的是,它在本地主機上運行良好一段時間。我不知道我能改變什麼。 –

+0

這爲XAMPP和MacOS X工作 - 進入database.php並將localhost更改爲'127.0.0.1' – ChicagoSky

0

只是爲了幫助Ubuntu的用戶出來: 我有同樣的錯誤在我的Ubuntu 13.10機器直接從apachefriends下載最新的XAMPP。 作爲總結:

查找mysqld的創建程序連接到插座:

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

它添加到您的CakePHP的數據庫配置文件(CakePHP的)/app/Config/database.php

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

對我來說,這最終導致我的蛋糕命令能夠在沒有「錯誤:數據庫連接」Mysql「缺失或無法創建的情況下執行」「。

0

將login>>更改爲您在設置數據庫時創建的用戶。只要確保數據庫配置完全反映了創建數據庫時使用的相同參數,並且al應該很好。

相關問題