Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:mysql_connect():[2002]没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock)在_Php_Mysql_Database - Fatal编程技术网

Php 警告:mysql_connect():[2002]没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock)在

Php 警告:mysql_connect():[2002]没有这样的文件或目录(尝试通过unix:///tmp/mysql.sock)在,php,mysql,database,Php,Mysql,Database,我正在尝试用苹果上的终端(用PHP)连接MySQL数据库 昨天它运行得很好,现在我突然发现了标题中的错误 当我使用浏览器运行脚本(我安装了XAMPP)时,脚本可以工作,但终端拒绝连接到DB 下面是我要连接的文件(当我不包括此文件时,脚本会工作,但它不会连接到数据库): 这应该行得通,因为它适用于我的浏览器 当您面临以下问题时,我在终端使用的命令是php scriptname.php: PHP抛出错误“警告:mysql_connect():2002没有这样的文件或目录(试图通过unix:///

我正在尝试用苹果上的终端(用PHP)连接MySQL数据库

昨天它运行得很好,现在我突然发现了标题中的错误

当我使用浏览器运行脚本(我安装了XAMPP)时,脚本可以工作,但终端拒绝连接到DB

下面是我要连接的文件(当我不包括此文件时,脚本会工作,但它不会连接到数据库):


这应该行得通,因为它适用于我的浏览器


当您面临以下问题时,我在终端使用的命令是
php scriptname.php

PHP抛出错误“警告:mysql_connect():2002没有这样的文件或目录(试图通过unix:///tmp/mysql.sock)"

/etc/php.ini
中的“mysql.default\u socket”值设置为

 "mysql.default_socket = /var/mysql/mysql.sock". 

然后在server admin中重新启动web服务

出于某种原因,OS X上的mysql获取所需套接字文件的位置有点错误,但谢天谢地,解决方案非常简单,只需设置一个符号链接

您可能有一个套接字(显示为零长度文件)为
/tmp/mysql.sock
/var/mysql/mysql.sock
,但一个或多个应用程序正在其他位置查找它。使用此命令查找:

ls -l /tmp/mysql.sock /var/mysql/mysql.sock
与其移动套接字,编辑配置文件,还必须记住将编辑的文件保存在本地,并远离路径正确的服务器,只需创建一个符号链接,这样您的Mac电脑就可以找到所需的套接字,即使它在错误的位置也可以

如果您有
/tmp/mysql.sock
但没有
/var/mysql/mysql.sock
,那么

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
如果您有
/var/mysql/mysql.sock
但没有
/tmp/mysql.sock
,那么

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

创建目录和链接需要权限,因此如果需要,只需在上面的命令前面加上sudo即可。

我也有此错误,但只能通过建议进行修复

要总结,请使用:

127.0.0.1
而不是:

localhost

原因是“localhost”是MySQL驱动程序的一个特殊名称,它使用UNIX套接字而不是TCP套接字来连接MySQL。

我也遇到了同样的问题,我就是这样解决的:

我有这个,但它不起作用:

$con = mysql_connect('localhost', 'root', '1234');
我这样做了,它成功了:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

我没有使用mysql服务器,而是直接连接到Unix套接字。为我工作。

我使用Mac OS X上的XAMPP,上面Brian Lowe的解决方案只做了一点修改

mysql.sock文件实际上位于“/Applications/xampp/xamppfiles/var/mysql/”文件夹中。所以必须在/tmp和/var/mysql中链接它。我还没有检查PHP命令行使用的是哪一个,但这已经解决了问题,所以我很高兴:-)


另一个解决方案是修复php.ini配置文件中的套接字位置,如下所示:

pdo_mysql.default_socket=/tmp/mysql.sock

当然,符号链接也可以工作,因此更改哪一个取决于您的偏好。

当您使用端口安装php53 mysql时,它会返回以下消息,这是此问题的解决方案:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock

MySQL套接字通常位于
/tmp/MySQL.sock
/var/MySQL/MySQL.sock
中,但PHP可能位于错误的位置

  • 检查您的插座在哪里:

     sudo /usr/libexec/locate.updatedb
    
  • 当updatedb终止时:

     locate mysql.sock
    
  • 然后找到您的php.ini:

     php -i | grep php.ini
    
    这将输出如下内容:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
    
  • 编辑您的php.ini

     sudo vim /opt/local/etc/php54/php.ini
    
  • 更改行:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock
    
    其中/tmp/mysql.sock是套接字的路径

  • 保存修改并退出ESC+SHIFT:x

  • 重新启动Apache

     sudo apachectl stop
     sudo apachectl start
    

  • 原因是php找不到mysql.sock的正确路径

    请首先确保您的mysql正在运行

    然后,请确认
    mysql.sock
    位于哪个路径,例如
    /tmp/mysql.sock

    然后将此路径字符串添加到php.ini:

    • mysql.default_socket=/tmp/mysql.sock
    • mysqli.default_socket=/tmp/mysql.sock
    • pdo_mysql.default_socket=/tmp/mysql.sock
    最后,重新启动Apache。

    我收到了相同的错误。 在我启动phpMyAdmin之前,Mysql是作为一个独立的应用程序运行的

    我刚停下来 然后 sudo/Applications/XAMPP/xamppfiles/XAMPP stop sudo/Applications/XAMPP/xamppfiles/XAMPP start


    它工作得很好

    我刚刚遇到这个问题,但它只在加载某些页面时出现(其他页面工作得很好)。原来我是在用
    MySQL\u close()
    关闭连接后调用MySQL的。因此,正如@brucenan所说:确保调用MySQL时MySQL正在运行

    修复即将出现的2002套接字错误–即链接MySQL放置套接字的位置和OSX认为应该在的位置,MySQL将它放在/tmp中,OSX在/var/MySQL中查找。套接字是一种允许MySQL客户机/服务器通信的文件类型

    sudo mkdir /var/mysql
    
    然后

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

    来源:

    Mac OS X EL Capitan+MAMP Pro 这样做

    那就这样做吧

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

    希望这能为您节省一些时间。

    我也遇到了同样的问题

    [pdo异常] SQLSTATE[HY000][2002]没有这样的文件或目录

    [ErrorException] 警告:PDO::_construct():[2002]没有这样的文件或目录(正在尝试通过unix:///var/mysql/mysql.sock)在…htdocs/Symfony/vendor/doctrine dbal/lib/doctrine/dbal/Driver/PDOConnection.php中

    因此,解决方案是创建一个指向sock文件的符号链接,从而解决问题。请执行以下操作以解决此问题:

    $sudo mkdir/private/var/mysql/

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


    来源:

    您只需在Apple终端上为MAMP php添加别名即可:

    alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
    
    示例:
    >phpmamp-v

    现在您可以运行类似以下内容:
    >phpmap scriptname.php

    alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
    
    $db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',// leave it for port 3306
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
    
    $db['default'] = array(
            'dsn'   => '',
            'hostname' => '127.0.0.1:8889',// leave it for port 8889
            'username' => 'yourUserhere',
            'password' => 'yourPassword',
            'database' => 'yourDatabase',
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => FALSE,
            'db_debug' => (ENVIRONMENT !== 'production'),
            'cache_on' => FALSE,
            'cachedir' => '',
            'char_set' => 'utf8',
            'dbcollat' => 'utf8_general_ci',
            'swap_pre' => '',
            'encrypt' => FALSE,
            'compress' => FALSE,
            'stricton' => FALSE,
            'failover' => array(),
            'save_queries' => TRUE
        );
    
    ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp