2015-05-20 13:43:23 10586次浏览 9条回答 7 悬赏 10 金钱
MacBook-Pro:yii_advanced$ php yii migrate
Yii Migration Tool (based on Yii v2.0.4)

Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002] No such file or directory'

in /Applications/XAMPP/xamppfiles/htdocs/yii_advanced/vendor/yiisoft/yii2/db/Connection.php:534

请问出现这种异常是因为啥呢?

最佳答案

  • nbacubafbi 发布于 2015-06-25 15:22 举报

    看了这么多答案,发现就没有一个靠谱的,告诉你们两个靠谱的方式吧。

    1. 快速解决方法;把Yii根目录下的/common/config/mail-local.php 文件中的localhost改成127.0.0.1
    2. 根本问题解决方法;windows不会出现这种问题,mac容易出现这种问题,是因为mac里面本来就有一个PHP了,如果还用XAMPP的话,这个时候就有两个PHP,但如果不经过配置,命令行方式的PHP默认执行的是系统自带的,所以要修改默认执行的PHP

    修改方法: 找到Yii根目录下的/yii文件打开,
    第一行#!/usr/bin/env php 改成 #!/usr/bin/env /Applications/XAMPP/xamppfiles/bin/php

    然后重启服务器再试试:)

    3 条回复
    回复于 2015-07-03 17:30 回复

    我想答案就该是这个

    回复于 2016-12-10 23:28 回复

    回复于 2017-05-28 22:23 回复

    我的就是这个原因, 装了2个版本的PHP在不同的路径造成的。

  • 回答于 2015-05-20 13:53 举报

    可能是没有安装php-mysql扩展,也可能是MySQL的服务没有开启。

    1 条回复
    回复于 2015-05-20 13:57 回复

    扩展我查看phpinfo都是可以看到的!

  • 回答于 2015-05-20 14:03 举报

    没有权限?怎么样才能十个字

    1 条回复
    回复于 2015-05-20 14:13 回复

    权限有,我执行php init时 没报错,执行成功了!

  • 回答于 2015-05-20 14:04 举报

    骚年你装PDO了没?

    1 条回复
    回复于 2015-05-20 14:12 回复

    PDO
    PDO support enabled
    PDO drivers mysql, pgsql, sqlite
    phpinfo里显示的,装了啊!

  • 回答于 2015-05-20 14:05 举报

    我看到你用的macbook,那么请你尝试一下,右击你的项目文件夹,然后点显示简介,然后点最下面的锁,打开锁后,点击齿轮,点击应用到子文件夹及子...之类的文字,然后再试一下。

    1 条回复
    回复于 2015-05-20 14:11 回复

    你的这个我试了 还是不行!

  • 回答于 2015-05-20 14:48 举报

    错误原因应该是:php找的对应的mysql.sock路径错了,mysql启动时候会创建一个mysql.sock,这个文件会有一个路径,建议检查下php对应的路径是否正确。

    3 条回复
    回复于 2015-05-20 15:07 回复

    我查看phpinfo:
    pdo_mysql.default_socket对应的是/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
    mysql.default_socket对应的也是/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

    $ sudo find / -name mysql.sock
    /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
    find: /dev/fd/3: Not a directory
    find: /dev/fd/4: Not a directory
    

    是这个吗?还是另外再创建的mysql.sock?

    回复于 2015-05-20 15:17 回复

    你首先查看下mysql本身的路径是啥呀,我的就是这个,具体你可以自己查看的,先命令行登录进去,什么mysql -u用户名 -p密码进去后就输入status回车就看到了,是在不行就重启下服务再去看看

    回复于 2015-05-21 13:34 回复

    问题确实是出在mysql.sock上
    如果你是用的XAMPP环境的话,请尝试使用以下命令:

    sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
    

    如果是自己安装的mysql:

    1.启动mysql,使用

    sudo find / -name mysql.sock
    

    来查看你的mysql.sock创建在哪里,Mac环境下的mysql.sock是在

    /tmp/mysql.sock
    

    2.修改php.ini

    pdo_mysql.default_socket=/tmp/mysql.sock #将之前find到的mysql.sock目录添加至此。
    

    注意在XAMPP环境下,

    pdo_mysql.default_socket=/var/mysql/mysql.sock #将之前ln -s的mysql.sock目录添加至此。
    

    最后别忘重启Apache或者nginx服务器

  • 回答于 2015-05-20 15:16 举报

    算了,都别猜了,把phpinfo关于mysql configure pdo等主要模块的图截上来,再讨论吧,这么猜,谁能猜得到,又不是华佗

    7 条回复
    回复于 2015-05-20 15:19 回复

    跟模块加载应该没关系的,报错原因都已经是SQLSTATE[HY000] [2002] No such file or directory了

    回复于 2015-05-20 15:25 回复

    哦,那就查看下mysql运行的状态啊

    回复于 2015-05-20 16:07 回复

    虽然没有解决,但现在知道是XAMPP的原因!

    回复于 2015-05-20 16:18 回复


    xampp下sqlstate hy000 2002
    我用这里的方法试了一下,不报之前的错误了,但又报别的错误了!果断放弃XAMPP

    回复于 2015-05-20 16:41 回复

    这里面就是做了个软链啊,改了下就好了的话,说明你原来指向的mysql.sock文件路径是不正确的,和XAMPP本身是没有关系的

    回复于 2015-05-20 16:53 回复

    好吧,我比较讨厌猜

    回复于 2015-05-20 16:59 回复

    改过之后没好,又报新的错误了 !

  • 回答于 2016-08-01 11:11 举报

    basic/config/db.php

    localhost改为127.0.0.1就可以了

    <?php
    
    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=127.0.0.1;dbname=yii2basic',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ];
    
    觉得很赞
  • 回答于 2017-01-29 18:18 举报

    我在解决时,用了一整天的时间,一开始以为是mysql,后来以为是php的问题
    编译重装几次,最后发现是这个问题,但是解决方法还需要其他步骤。
    感谢以下这位的博客:
    http://www.iamlintao.com/5026.html
    其实就是mac自带php,我们自己安装的PHP反而无法被系统env找出来。
    修改方法: 找到Yii根目录下的/yii文件打开,
    第一行#!/usr/bin/env php 改成 #!/usr/bin/env /(...你自己安装的php目录...)/bin

    同时,解决时,要注意:还不是更改一句这么简单。
    需要在终端输入:env
    立马可以看到目前的PATH默认值
    你可以看见,你自己安装的目录,肯定不在优先,而mac系统自带的php所在的目录反而在优先。

    所以,你应当更改path的设置文件。
    可以参考: http://www.th7.cn/system/mac/201409/70274.shtml
    在我的机器中,是 /etc/bashrc 里边设置的,需要把PATH的第一个遍历目录改成你自己的目录。
    还有:
    (1)OSX10.11系统增强了权限,sudo也无法修改
    先执行 sudo chmod 755 /etc/bashrc
    然后 sudo vi /etc/bashrc
    (2)修改后:source /etc/bashrc
    (3)把终端exit退出,然后重新进去,输入env,你会发现PATH常量已经将你的PHP安装目录变为第一优先。
    然后进入yii的主目录,输入./yii migrate
    一切OK!!!!

您需要登录后才可以回答。登录 | 立即注册
我不是我
主管

我不是我

注册时间:2015-01-07
最后登录:2015-10-23
在线时长:12小时31分
  • 粉丝8
  • 金钱310
  • 威望10
  • 积分530

热门问题