PHP MySQL连接失败

xzlaal3s  于 2022-11-21  发布在  Mysql
关注(0)|答案(7)|浏览(120)

我尝试使用以下代码将PHP代码安全地连接到MySQL:

<html>
    <?php
        $con = mysql_connect("localhost:3306","root","password");
        if(!$con)
        {
            die('Could not connect: ' . mysql_error());
        }
        else
        {
            echo "Connection established!";
        }
        mysql_close($con);
    ?>
</html>

但我一直收到以下错误消息:
警告:mysql_connect()[函数. mysql-连接]:无法连接到MySQL服务器,该服务器位于C:\xampp\htdocs\database_connect. php中的“localhost”(10061)上。无法连接到'localhost'上的MySQL服务器(10061)
以下是我采取的故障排除步骤:

  • 已检查mysqld是否正在Windows任务管理器进程中运行-它正在运行
  • 通过在Windows命令提示符下键入以下命令来检查主机上是否正在运行MySQL:“telnet 192.0.0.1 3306”,并收到消息“无法在端口3306上打开与主机的连接:连接失败”
  • 已检查Windows防火墙是否阻止MySQL - MySQL是个例外。

我如何让这段代码安全地工作?我如何检查关于我的MySQL的基本有用信息,如用户名?

qkf9rpyu

qkf9rpyu1#

您可以使用tcpview检查MySQL服务器是否绑定到端口3306。更简单地说,从主机说明符中删除该端口。然后,驱动程序应尝试使用命名管道,而不是TCP套接字。
另外,我强烈建议您改用PDO MySQL驱动程序。您正在使用的驱动程序已经非常过时了。PDO的一大优势是支持prepared statements,它提供了安全性和效率方面的好处。
编辑:
这并没有回答你的主要问题,但是在评论中发布这些信息会很混乱。
除了W3Schools,您还可以查看以下网站中建议的资源:

g0czyy6m

g0czyy6m2#

**注:**这不是OP问题的解决方案,但出于历史原因,我将保留我的答案,也因为它可能是其他一些人的问题。

您是否使用Windows Vista/7并运行PHP 5.3.1?
PHP中MySQL库的一个最新更改(现在使用mysqlnd)导致连接到localhost时出现问题。一个bug已被填补,但在此之前,请确保您的hosts文件包含localhost的条目。
您的hosts档案localhost项目必须如下所示:

127.0.0.1  localhost
#::1       localhost

正如您所看到的,IPv6条目被注解掉了,而IPv4条目没有被注解掉。
hosts文件位于:

%WINDIR%\System32\drivers\etc\hosts

来源

ajsxfq5m

ajsxfq5m3#

好了,各位,这是我第一次尝试使用Outis建议的PDO连接MySQL和PHP。它成功了。

<?php 
$user = root;
$pass = password;
try
{
    $dbh = new PDO('mysql:host = localhost; dbname=databaseName', $user,$pass);
    if($dbh)
    {
        print "Connected successfully";
    }
}
catch (PDOException $e)
{
    print "Error: " . $e->getMessage(). "<br/>";
    die();
}
?>

这是我的第二次尝试-这次我尝试执行查询

<?php 
$user = root;
$pass = password;
try
{
    $dbh = new PDO('mysql:host = localhost; dbname=databaseName', $user,$pass);
    foreach($dbh->query('SELECT * FROM tableName') as $row)
{
    print_r($row);
}
$dbh = null; 
}
catch (PDOException $e)
{
    print "Error: " . $e->getMessage(). "<br/>";
    die();
}
?>

运行此代码后,我得到以下结果:
数组([exo_flowers_ID] =〉1 [0] =〉1 [name] =〉夹竹桃串瓣兰[1] =〉夹竹桃串瓣兰[country] =〉智利[2] =〉智利[env_worker_id] =〉1 [3] =〉1)Array([exo_flowers_ID] =〉2 [0] =〉2 [名称] =〉雪登菊[1] =〉雪登菊[国家/地区] =〉北威尔士[2] =〉北威尔士[环境工作者标识] =〉1 [3] =〉1)
我只想显示一行或一列的内容,但却得到了所有内容加上所有这些括号。如何只显示表格行或列的内容?
还有最后,我怎么这么一个质问似的:SELECT * FROM表名称WHERE '列名称1' = '某个用户名' AND '列名称2' = '其他用户名';?

wlzqhblo

wlzqhblo4#

您无法恢复密码,但可以创建一个新密码。关闭MySQL服务并执行:

cd c:\mypathtomysql\bin
mysqladmin -u root password NEWPASSWORD
9vw9lbht

9vw9lbht5#

也许您在MySQL安装时没有设置远程连接。您尝试通过端口进行连接,这与远程连接是一样的。我已经有一段时间没有使用MySQL了,但这是一个致命的漏洞:
通过在Windows命令提示符下键入以下命令来检查主机上是否正在运行MySQL:“telnet 192.0.0.1 3306”,并收到消息“无法在端口3306上打开与主机的连接:连接失败”
它不会工作。你确定它是为端口3306而不是另一个端口配置的吗?再检查一遍。
代码本身看起来很好,不是问题所在。端口显然是问题所在。

iaqfqrcu

iaqfqrcu6#

如果可以访问MySQL shell,则可以检查服务器的网络配置,如下所示:

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  | 
+---------------+-------+

mysql> show variables like 'skip_networking';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   | 
+-----------------+-------+
1 row in set (0.00 sec)

如果skip_networking设置为“ON”,则您的MySQL服务器已配置为不允许通过网络访问,并且只能通过本地套接字运行。否则,它将侦听port配置变量中指定的端口。

at0kjp5o

at0kjp5o7#

我解决了同样的问题“无法连接到MySQL服务器上'localhost'”与以下步骤(Windows 7,XAMPP v.3.2.1安装,PHP连接到MySQL不工作):
1.打开XAMPP控制面板(我的版本是v.3.2.1)。按面板右侧的“Shell”按钮。
1.窗口打开时带有一个标题:“管理员道:XAMP for Windows - mysql -u根目录”并添加以下文本:

Setting environment for using XAMPP for Windows
comp@COMP c:\xampp

1.输入:#mysql
获得的答案:Welcome to the MySQL monitor…
然后输入:mysql>create database mdb;
答案:ERROR 1044 (42000): Access denied for user ‘’@’localhost’ to database ‘drawdb’
输入:#mysql –u root
答案:Welcome to the MySQL monitor…
输入:mysql>create database mdb;
答案:Query OK, 1 row affected (0.00 sec)
输入:mysql>grant all on mdb.* to user@localhost identified by ‘password’;
答案:Query OK, 0 rows affected (0.06 sec)
也就是说,我允许指定的用户访问手动创建的数据库,然后用用户名“user”和密码“password”成功创建了到MySQL的php连接:

> $servername = "localhost";  
> $username = "user";  
> $password = "password"; 
> // Create connection 
> $conn = new mysqli($servername, $username, $password);

相关问题