【问题标题】:Not able to connect to MySQL server using PDO [closed]无法使用 PDO 连接到 MySQL 服务器 [关闭]
【发布时间】:2012-05-21 08:41:21
【问题描述】:

我有一个用于连接 MySQL 数据库的 PHP 脚本。通过 mysql_connect 进行的连接工作正常,但是在尝试使用 PDO 时出现以下错误:

SQLSTATE[HY000] [2005] Unknown MySQL server host 'hostname' (3)

我用来连接的代码如下:

    <?php  
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    $hostname_localhost ="hostname";  
    $database_localhost ="dbname";  
    $username_localhost ="user";  
    $password_localhost ="pass";  
    $user = $_GET['user'];  
    $pass = $_GET['pass'];

    try{
        $dbh = new PDO("mysql:host=$hostname_localhost;dbname=$database_localhost",$username_localhost,$password_localhost);
        echo 'Connected to DB';
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $dbh->prepare("SELECT check_user_company(:user,:pass)");
        $stmt = $dbh->bindParam(':user',$user,PDO::PARAM_STR, 16);
        $stmt = $dbh->bindParam(':pass',$pass,PDO::PARAM_STR, 32);

        $stmt->execute();

        $result = $stmt->fetchAll();

        foreach($result as $row)
        {
            echo $row['company_id'].'<br />';
        }

        $dbh = null;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    } 
    ?>  

提前致谢

【问题讨论】:

  • 错误很明显......指定的主机名无法解析为IP地址。
  • 在显示“主机名”的地方,您应该填写 您的 mySQL 服务器的主机名或 IP 地址。
  • 我忘了说,我使用的是 IP 地址(该 IP 地址也在错误中),但出于安全原因,我故意更改了这些值
  • 你的IP地址不正确,或者那里没有运行你可以访问的mySql服务器。
  • 我解决了这个问题,在声明中:$hostname_localhost 我也把端口号放在声明中,在添加后:port=$port_localhost 它工作了

标签: php mysql connection pdo host


【解决方案1】:

您似乎没有指定数据库主机的 dns 详细信息或 IP 地址。添加将解决问题

【讨论】:

    【解决方案2】:

    遇到同样的问题。我的解决方案是另一个数据库端口。我写了 localhost:1234 得到了这个错误。

    固定为:

    mysql:host=$hostname_localhost;port=1234;dbname=$database_localhost",$username_localhost,$password_localhost);
            echo 'Connected to DB';
    

    【讨论】:

      【解决方案3】:

      看起来确实很简单,这是我用来构建 PDO 连接器的内容(注意到您的 dbname 和 host 与我的不同,不知道是否相关,但值得一试):

      PDO 创建函数

      require_once('config.inc.php');
      
      function buildDBConnector(){
          $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST;
          $dbh = new PDO($dsn, C_USER, C_PASS);
          $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          return $dbh;
      }
      

      config.inc.php

      define('C_HOST','localhost');// MySQL host name (usually:localhost)
      define('C_USER','sweetUsername');// MySQL username
      define('C_PASS','sweetPassword');// MySQL password
      define('C_BASE','superGreatDatabase');// MySQL database
      

      虽然这毫无意义,但当我尝试在 newPDO 调用期间声明包含变量的 $dsn 内联时,我也不断失败。我把它拆开并使用 $dsn 变量来做到这一点。从那以后就没有问题了。

      想知道您是否偶然使用了共享主机?

      注意: 如果您没有专用 IP,而是通过 NAT,您的 IP 将无法正确转换为您的实际服务器。

      有帮助吗?

      更新: 刚想到另一件事。您是否尝试连接到与运行脚本不同的 IP 上的 mysql 数据库?如果是这样,您可能需要为调用数据库的 IP 启用 remoteSQL 访问。相当容易做到,但如果您不访问 localhost,则非常重要。

      【讨论】:

      • 如何启用远程SQL访问?
      猜你喜欢
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多