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

时间:2012-05-13 17:04:04

标签: php mysql connection pdo host

我有一个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();
    } 
    ?>  

提前致谢

3 个答案:

答案 0 :(得分:9)

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

修正:

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

答案 1 :(得分:3)

这看起来非常简单,这就是我用来构建我的PDO连接器(注意到你的dbname和主机的完成方式与我的不同,如果相关则不知道,但值得检查):

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

虽然没有意义,但当我试图在$dsn调用期间声明newPDO内联包含变量时,我也一直都会遇到失败。我将它拆开并使用$ dsn变量来执行此操作。从那时起就没有问题了。

想知道你是偶然共享主机吗?

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

那有什么帮助?

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

答案 2 :(得分:0)

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