2012-05-13 46 views
9

Tôi có một tập lệnh PHP mà tôi sử dụng để kết nối với cơ sở dữ liệu MySQL. Kết nối thông qua mysql_connect hoạt động hoàn hảo, nhưng khi cố gắng với PDO tôi nhận được lỗi sau:Không thể kết nối với máy chủ MySQL bằng PDO

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

mã tôi sử dụng để kết nối là dưới đây:

<?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(); 
    } 
    ?> 

Cảm ơn trước

+0

Lỗi này đủ rõ ràng ... tên máy chủ được chỉ định không thể được giải quyết thành địa chỉ IP. –

+3

Trường hợp nó nói "tên máy chủ", bạn phải điền vào * tên máy chủ hoặc địa chỉ IP của máy chủ * mySQL của bạn. –

+1

Tôi quên đề cập đến, tôi đang sử dụng địa chỉ IP (và địa chỉ IP đó cũng là lỗi) nhưng tôi đã thay đổi các giá trị có mục đích vì lý do bảo mật – user1337210

Trả lời

3

Nó dường như khá đơn giản, đây là những gì tôi sử dụng để xây dựng các kết nối PDO của tôi (nhận thấy dbname và máy chủ của bạn được thực hiện khác với tôi, dunno nếu có liên quan, nhưng đáng giá):

PDO Creation chức năng

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 

Và trong khi nó làm cho không có ý nghĩa, khi tôi cố gắng để khai báo $dsn inline bao gồm các biến trong newPDO cuộc gọi, tôi cũng nhận được thất bại. Tôi đã phá vỡ nó ra và sử dụng biến $ dsn để làm như vậy. Và chưa có vấn đề gì kể từ đó.

Tự hỏi liệu bạn có đang ở trong lưu trữ được chia sẻ không?

LƯU Ý: Nếu bạn không có một IP chuyên dụng, và thay vào đó đang trải qua một NAT, IP của bạn sẽ không đúng cách dịch đến máy chủ thực tế của bạn.

Trợ giúp đó?

UPDATE: Chỉ cần nghĩ đến điều khác. Bạn đang cố gắng kết nối với một cơ sở dữ liệu mysql trên một IP khác với bạn đang chạy tập lệnh của bạn từ? Nếu vậy, bạn có thể sẽ cần phải kích hoạt truy cập từ xa cho ip bạn đang gọi cơ sở dữ liệu từ. Khá dễ dàng để thực hiện, nhưng CRITICAL nếu bạn không truy cập localhost.

+1

Làm cách nào để bật truy cập từ xa? – patorjk

9

Có cùng một vấn đề. Giải pháp của tôi là một cổng cơ sở dữ liệu khác. Tôi đã viết localhost: 1234 và có lỗi này.

cố định với:

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

bạn thưa bạn thật tuyệt vời và tôi yêu bạn – Nick

0

Bạn không dường như để xác định các chi tiết dns máy chủ cơ sở dữ liệu hoặc địa chỉ IP. Việc thêm vào đó sẽ giải quyết được sự cố

Các vấn đề liên quan