9

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

提前致谢

4

3 回答 3

9

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

固定:

mysql:host=$hostname_localhost;port=1234;dbname=$database_localhost",$username_localhost,$password_localhost);
        echo 'Connected to DB';
于 2012-06-29T13:11:53.653 回答
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;
}

配置文件

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 访问。相当容易做到,但如果您不访问本地主机,则至关重要。

于 2012-05-15T04:48:10.027 回答
0

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

于 2014-01-16T20:09:39.743 回答