Не удалось подключиться к серверу MySQL с помощью PDO

У меня есть 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();
    } 
    ?>  

заранее спасибо


person user1337210    schedule 13.05.2012    source источник
comment
Ошибка достаточно очевидна... указанное имя хоста не может быть преобразовано в IP-адрес.   -  person Marc B    schedule 13.05.2012
comment
Там, где указано имя хоста, вы должны указать имя хоста или IP-адрес вашего сервера mySQL.   -  person Pekka    schedule 13.05.2012
comment
Я забыл упомянуть, что я использую IP-адреса (и этот IP-адрес также указан в ошибке), но я намеренно изменил значения из соображений безопасности.   -  person user1337210    schedule 13.05.2012
comment
Ваш IP-адрес неверен, или там не работает сервер mySql, к которому вы можете получить доступ.   -  person vascowhite    schedule 13.05.2012
comment
теперь это объясняет, почему я могу подключиться к обычному оператору mysql_connect, используя точно такую ​​​​же переменную.   -  person user1337210    schedule 13.05.2012
comment
Я решил проблему, при объявлении: $hostname_localhost я также указал номер порта в заявлении, после добавления: port=$port_localhost это сработало   -  person user1337210    schedule 13.05.2012
comment
@ user1337210 Не могли бы вы опубликовать свой рабочий код? Я с той же проблемой.   -  person Will    schedule 02.06.2014


Ответы (3)


Получил ту же проблему. Мое решение было еще одним портом базы данных. Я написал localhost:1234 и получил эту ошибку.

Исправлено с:

mysql:host=$hostname_localhost;port=1234;dbname=$database_localhost",$username_localhost,$password_localhost);
        echo 'Connected to DB';
person Edža    schedule 29.06.2012

Это кажется довольно простым, вот что я использую для создания своих соединителей PDO (заметил, что ваше имя базы данных и хост сделаны иначе, чем у меня, не знаю, имеет ли это значение, но стоит проверить):

Функция создания 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-адрес не будет правильно транслироваться на ваш фактический сервер.

Это помощь вообще?

ОБНОВЛЕНИЕ: Просто подумал о другом. Вы пытаетесь подключиться к базе данных mysql, которая находится на другом IP-адресе, чем вы запускаете свои скрипты? Если это так, вам, вероятно, потребуется включить удаленный доступ SQL для IP-адреса, с которого вы вызываете базу данных. Довольно легко сделать, но КРИТИЧЕСКИ, если вы не обращаетесь к локальному хосту.

person MaurerPower    schedule 15.05.2012
comment
Как включить удаленный доступ к SQL? - person patorjk; 12.10.2012

Кажется, вы не указываете данные DNS хоста базы данных или IP-адрес. Добавление решит проблему

person ZongoBoyX    schedule 16.01.2014