使用迁移工具Yii错误

时间:2013-09-12 17:16:51

标签: php yii

我正在尝试使用迁移工具,但收到以下错误:

exception 'CDbException' with message 'CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] Connection refused' in /Applications/MAMP/htdocs/yii-sandbox/framework/db/CDbConnection.php:382
Stack trace:
#0 /Applications/MAMP/htdocs/yii-sandbox/framework/db/CDbConnection.php(330): CDbConnection->open()
#1 /Applications/MAMP/htdocs/yii-sandbox/framework/db/CDbConnection.php(308): CDbConnection->setActive(true)
#2 /Applications/MAMP/htdocs/yii-sandbox/framework/base/CModule.php(387): CDbConnection->init()
#3 /Applications/MAMP/htdocs/yii-sandbox/framework/cli/commands/MigrateCommand.php(442): CModule->getComponent('db')
#4 /Applications/MAMP/htdocs/yii-sandbox/framework/cli/commands/MigrateCommand.php(451): MigrateCommand->getDbConnection()
#5 /Applications/MAMP/htdocs/yii-sandbox/framework/cli/commands/MigrateCommand.php(482): MigrateCommand->getMigrationHistory(-1)
#6 /Applications/MAMP/htdocs/yii-sandbox/framework/cli/commands/MigrateCommand.php(84): MigrateCommand->getNewMigrations()
#7 [internal function]: MigrateCommand->actionUp(Array)
#8 /Applications/MAMP/htdocs/yii-sandbox/framework/console/CConsoleCommand.php(172): ReflectionMethod->invokeArgs(Object(MigrateCommand), Array)
#9 /Applications/MAMP/htdocs/yii-sandbox/framework/console/CConsoleCommandRunner.php(71): CConsoleCommand->run(Array)
#10 /Applications/MAMP/htdocs/yii-sandbox/framework/console/CConsoleApplication.php(92): CConsoleCommandRunner->run(Array)
#11 /Applications/MAMP/htdocs/yii-sandbox/framework/base/CApplication.php(180): CConsoleApplication->processRequest()
#12 /Applications/MAMP/htdocs/yii-sandbox/framework/yiic.php(33): CApplication->run()
#13 /Applications/MAMP/htdocs/yii-sandbox/projects/trackstar/protected/yiic.php(7): require_once('/Applications/M...')
#14 /Applications/MAMP/htdocs/yii-sandbox/projects/trackstar/protected/yiic(4): require_once('/Applications/M...')

我已检查console.php中的数据库设置,如下所示:

'db'=>array(
    'connectionString' => 'mysql:host=127.0.0.1;dbname=yii_trackstar, unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock',
    'emulatePrepare' => true,
    'username' => 'yii',
    'password' => 'xxx',
    'charset' => 'utf8',
),

如您所见,我已尝试将主机设置为127.0.0.1并根据其他建议设置unix套接字。

我正在使用MAMP(如你所见)。从受保护的目录,我正在运行命令:./yiic migrate

无论我改变什么,我都会收到相同的错误消息。

* 更新:*

我刚刚意识到了什么。将host=localhost更改为host=127.0.0.1实际上会给我一个connection refused的不同错误。如果我将其设置回localhost,则错误如下:

exception 'CDbException' with message 'CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or directory' in /Applications/MAMP/htdocs/yii-sandbox/framework/db/CDbConnection.php:382

11 个答案:

答案 0 :(得分:6)

您可以查看yii框架论坛,http://www.yiiframework.com/forum/index.php/topic/16-db-connection-string已发布类似问题

注意

具体来说,解决它的是从那个线程:

关于PHP和Mac OSX的说明: PHP OS捆绑在Mac OSX上,通常是从命令行尝试php命令时执行的版本。您需要让php命令执行PHP5.x或更高版本。通常,您已经安装了PHP5.x或更高版本,但需要告诉php命令执行较新版本而不是较旧版本。当然有很多方法可以达到这个目的,但这里有一个:

在任何终端提示下,输入:

prompt>which php

这应该告诉你操作系统在哪里寻找php命令告诉我/usr/bin/php。 如果我导航到/usr/bin并发出ls *php*,我会看到三个文件:

php
php-config
phpize

这些都是针对捆绑版本的PHP4.x 重命名这些文件以在其名称中使用4,以记住这些是PHP4的可执行文件

mv php php4
mv php-config php-config4
mv phpize phpize4

然后,为这些中的每一个创建sym链接以指向您已安装的PHP5.x或更高版本。在我的情况下,这些位于/usr/local/apache/php/bin。所以我会从/usr/bin目录

发出
ln -s [absolute path to your php5.x] php

和其他文件类似。

答案 1 :(得分:2)

在运行yyic的过程中我遇到了问题,直到我在连接字符串中将localhost更改为127.0.0.1。

答案 2 :(得分:2)

尝试在主机字符串中指定端口。所以localhost:8889代替localhost127.0.0.1 - 无论您使用哪个。

这解决了我的问题。

答案 3 :(得分:1)

您可以尝试使用正确的关键字unix_socket设置Socket,并使用与;字符串中的其他变量相同的方式设置{<1}},而不是空格:

'connectionString' => 'mysql:host=localhost;dbname=yii_trackstar;Socket=/Applications/MAMP/tmp/mysql/mysql.sock',

您可以在此处查看更多连接字符串:http://www.connectionstrings.com/mysql

答案 4 :(得分:1)

尝试在db.php文件上设置host = 127.0.0.1

答案 5 :(得分:1)

简单解决方案:

只需打开 backend / common / config 目录中的 mail-local.php 页面即可。

然后将 localhost 更改为 127.0.0.1

现在你运行 php yii migrate

希望,它将在Databse中成功创建表格

答案 6 :(得分:0)

将连接字符串更改为此

'connectionString' => 'mysql:host=localhost;dbname=yii_trackstar',

答案 7 :(得分:0)

打开终端并使用此

echo "export PATH=/Applications/MAMP/bin/php/php5.x.x/bin:$PATH" >> ~/.profile

5.x.x是您使用的PHP版本

这是因为Yii框架使用您的默认PHP附带OSX,而​​不是MAMP的PHP。 要确保输入“which php”,看看它是/Applications/MAMP/bin/php/php5.x.x/bin/php,那么你就完成了。

希望这有帮助:)

答案 8 :(得分:0)

这是一个mac问题,它使用安装在机器上的旧版本的php而不是MAMP附带的php5。所以我不得不强迫它使用MAMP附带的PHP版本5。

所以我必须在终端中写这个并且它有效:

/Applications/MAMP/bin/php/php5.5.3/bin/php / Applications / MAMP / htdocs / projectname / protected / yiic migrate

答案 9 :(得分:0)

编辑文件config / db.php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=namedb',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8',
];

答案 10 :(得分:0)

MAMP PRO点击启用允许在Mysql菜单中访问MySql。