2012-05-13 20 views
9

Tengo un script PHP que utilizo para conectarme a una base de datos MySQL. Conexión a través de mysql_connect funciona perfectamente, pero cuando se trata con DOP me sale el siguiente error:No puedo conectarme al servidor MySQL usando PDO

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

el código que utilizo para conectar es a continuación:

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

Gracias de antemano

+0

El error es suficientemente obvio ... el nombre de host especificado no se puede resolver en una dirección IP. –

+3

Donde dice "nombre de host" se supone que debes completar * el nombre de host o la dirección IP de tu servidor mySQL. –

+1

Olvidé mencionar, estoy usando direcciones IP (y esa dirección IP también está en el error) pero modifiqué los valores a propósito por razones de seguridad – user1337210

Respuesta

3

sí parece bastante sencillo, esto es lo que uso para construir mis conectores PDO (noté que su nombre de host y db se realizan de manera diferente a la mía, no sé si es relevante, pero vale la pena comprobarlo):

DOP Creación función

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 

Y mientras que no tiene sentido, cuando trataba de declarar $dsn en línea incluyendo variables durante el newPDO llamada, seguí recibiendo fracasos también. Lo rompí y usé la variable $ dsn para hacerlo. Y no he tenido un problema desde entonces.

¿Te preguntas si estás en alojamiento compartido por casualidad?

NOTA: Si usted no tiene una dirección IP dedicada, y en su lugar se va a través de un NAT, su IP no se traducirá correctamente al servidor real.

¿Eso ayuda en absoluto?

ACTUALIZACIÓN: acaba de ocurrir otra cosa. ¿Estás intentando conectarte a una base de datos mysql que está en una dirección IP diferente de la que estás ejecutando? Si es así, es probable que necesite habilitar el acceso de remoteSQL para la ip a la que llama desde la base de datos. Bastante fácil de hacer, pero CRÍTICO si no está accediendo a localhost.

+1

¿Cómo se habilita el acceso de remoteSQL? – patorjk

9

Tiene el mismo problema. La solución de la mina era otro puerto de base de datos. Escribí localhost: 1234 y obtuve este error.

fija a:

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

usted señor son fantásticos y te amo – Nick

0

Usted no parece especificar los detalles de DNS de los equipos de base de datos o la dirección IP. Agregar eso resolverá el problema

Cuestiones relacionadas