代码之家  ›  专栏  ›  技术社区  ›  Chris Westbrook

无法使用php连接到mysql

  •  10
  • Chris Westbrook  · 技术社区  · 15 年前

    我似乎无法用php脚本连接mysql,尽管我可以用phpmyadmin很好地连接。我创建了一个具有密码的用户,并为其提供了数据库的适当权限,但每次连接时,它都会死掉,说访问被拒绝。我正在windows xp设备上使用xampp。防火墙都被禁用了,我已经检查了用户名和密码是否正确。代码如下:

    $conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());
    

    8 回复  |  直到 11 年前
        1
  •  17
  •   Emil H    15 年前

    从手动输入 mysql_connect() :

    或“localhost:port”作为服务器 MySQL客户端库将覆盖 套接字(Windows上的命名管道)。如果你 要使用TCP/IP,请使用“127.0.0.1” 而不是“本地主机”。如果MySQL 客户端库尝试连接到 将路径更正为运行时配置 在PHP配置中,然后离开 服务器字段为空。

    希望这不是完全多余的。:)

        2
  •  6
  •   Fire Crow    15 年前

    我以前见过这种情况,一个mysql用户通过php登录,另一个用户不通过php登录。有时用户甚至可以从命令行工作,但不能从php工作。

    埃米尔一直在说两个。mysql用户实际上是用户/主机对。所以用户megadots@localhost以及用户megadots@mycoolhost在mysql.user表中作为两个单独的记录列出。

    如果可以从命令行登录,请运行此查询。

    SELECT user, host FROM mysql.user
    

    您应该看到用户及其主机的完整列表。

    要重置主机,请运行以下查询(!在整个mysql安装过程中使用privilages表时要小心)

    update mysql.user set host = 'hostname' 
    where user = 'username' and host = 'oldhostname';
    
    flush privileges;
    

        3
  •  2
  •   Flexo - Save the data dump sunny moon    13 年前

    如果您使用的是Linux,请使用synaptic软件包管理器查找并下载PHP和MySQL所需的所有库和MOD,以便它们都可以连接。我的问题是单独运行的PHP脚本在服务器端工作,但当我尝试使用PHP脚本连接到MySQL时,它无法连接,我只能看到一个纯白色的页面。然后我注意到我没有PHP用来连接MySQL的MySQL客户端库。我只有MySQL服务器库。一旦我安装了客户端库并重新启动apache服务器,我的PHP脚本就没有问题了。默认情况下,PHP5不随MySQL客户端库一起安装。

        4
  •  2
  •   Peter O. Manuel Pinto    12 年前

    在我的例子中,我删除了用于创建我正在使用的数据库的用户。通常,这会给出错误“用户指定的定义者不存在”,但出于某种原因,它只是返回对我的PHP代码更一般的访问被拒绝。我不知道为什么我仍然可以通过命令行和其他界面登录。为了纠正我的问题,我重新创建了被删除的用户。

        5
  •  0
  •   Cruachan    15 年前

    这可能是输入错误,或者您没有授予特权。有时很难发现这些问题。

    我建议不要使用phpmyadmin,而是下载 SQLYOG (免费社区版很棒)并尝试通过它与您的用户登录。诊断出问题后,将用户名/密码复制/粘贴回脚本。

    顺便说一句,phpmyadmin很好,但是像sqlyog这样的程序通常更方便,所以无论如何都值得一试——我相信你会被转换的。如果sqlyog不太符合您的口味,那么还有其他几种免费的商业替代品。

        6
  •  0
  •   Fredrik    15 年前

    并给了db适当的特权

    怎样 授予用户权限时,您使用了哪个主机?

    通常是这样做的:

    GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
    FLUSH privileges;
    

    在您的情况下,“somehost”可能应该是“localhost”或“127.0.0.1”(参见其他帖子)

    http://dev.mysql.com/doc/refman/5.1/en/grant.html

        7
  •  0
  •   JMS    11 年前

    遇到类似问题后,我发现将“127.0.0.1”替换为“localhost”成功了(尽管我能够使用“localhost”通过终端成功连接)。

        8
  •  0
  •   vy32    5 年前
    me@lastdance Sites % sudo port search php | grep mysql
    php-mysql-xdevapi @8.0.17 (php, devel)
    php52-mysql @5.2.17 (php, databases)
    a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
    php53-mysql @5.3.29 (php, databases)
    a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
    php54-mysql @5.4.45 (php, databases)
    a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
    php55-mysql @5.5.38 (php, databases)
    a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
    php56-mysql @5.6.40 (php, databases)
    a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
    php70-mysql @7.0.33 (php, databases)
    a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
    php71-mysql @7.1.32 (php, databases)
    a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
    php71-mysql-xdevapi @8.0.17 (php, devel)
    php72-mysql @7.2.23 (php, databases)
    a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
    php72-mysql-xdevapi @8.0.17 (php, devel)
    php73-mysql @7.3.10 (php, databases)
    a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
    php73-mysql-xdevapi @8.0.17 (php, devel)
    me@lastdance Sites % sudo port install php73-mysql
    --->  Computing dependencies for php73-mysql
    --->  Cleaning php73-mysql
    --->  Scanning binaries for linking errors
    --->  No broken files found.
    --->  No broken ports found.
    me@lastdance Sites %
    
    1. 确保在php.ini文件中正确指定了localhost mysql套接字。看见 My database user exists, but I still get an (HY000/2002): No such file or directory

    在我的系统中,我必须编辑文件 /opt/local/etc/php73/php.ini 并加上:

    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysqli.default-socket
    mysqli.default_socket = /opt/local/var/run/mysql8/mysqld.sock