无法使用PDO连接到MySQL服务器

9
我有一个PHP脚本,用于连接MySQL数据库。使用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地址。 - Marc B
3
在“hostname”一词处,您应该填写的MySQL服务器的主机名或IP地址。 - Pekka
1
我忘了提到,我正在使用IP地址(错误信息中也包含该IP地址),但出于安全原因,我故意更改了这些值。 - user1337210
您的IP地址不正确,或者那里没有运行的MySQL服务器可供访问。 - vascowhite
2
我解决了这个问题,在声明中:$hostname_localhost我还在语句中加入了端口号,在添加了 port=$port_localhost 后它就起作用了。 - user1337210
显示剩余2条评论
3个回答

9

我遇到了同样的问题。我的解决方案是更改数据库端口。我将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。
这有帮助吗?
更新: 刚想到另一件事。您是否尝试连接到与您运行脚本的IP不同的mysql数据库? 如果是这样,您可能需要为从中调用数据库的ip启用remoteSQL访问。 做起来相当容易,但如果您不是在访问localhost,则至关重要。

1
如何启用远程SQL访问? - patorjk

0

你似乎没有指定数据库主机的DNS细节或IP地址。添加后将解决问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接