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 とホストは私のものとは異なる方法で行われていることに気付きました。関連性があるかどうかはわかりませんが、チェックする価値があります):

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 とは異なる IP にある mysql データベースに接続しようとしていますか? その場合、データベースの呼び出し元の IP に対して remoteSQL アクセスを有効にする必要がある可能性があります。かなり簡単ですが、ローカルホストにアクセスしていない場合は重要です。

于 2012-05-15T04:48:10.027 に答える
0

データベースホストのDNSの詳細またはIPアドレスを指定していないようです。それを追加すると問題が解決します

于 2014-01-16T20:09:39.743 に答える