en mi caso particular me suele pasar, al momento de especificar el host, le doy la IP del servidor la de acceso internet o de red y no me conecta, y al cambiarlo por localhost si conecta. Supongo que esto se da en mi caso, tanto porque el codigo como la Db estan en el mismo servidor.
te adjunto una clase que hice con la que me conecto a postgresql y a mysql, usando los mismos metodos
Código PHP:
<?php
/**
* Clase que contiene metodos publicos unicos para la conexion a bases de datos mysql y/o postgresql
* @author Gustavo Adolfo Alzate
* @copyright webness
* @version 1.0
*/
class DBMS
{
/**
* tipo de base de datos a usar 1:MYSQL, 2:POSTGRESQL
* @var int
*/
private $intDataBase;
/**
* ip o url del servidor de base datos
* @var string
*/
private $strServer;
/**
* usuario de conexion al servidor de base de datos
*
* @var string
*/
private $strUser;
/**
* password para la conexion a la base de datos
*
* @var string
*/
private $strPassword;
/**
* nombre de la base de datos con la que se establece conexion
*
* @var string
*/
private $strDataBase;
/**
* identificador de conexion
*
* @var conection<string>
*/
private $con;
/**
* resultado de una consulta sql
*
* @var result<string>
*/
private $result;
/**
* cadena sql con la sintaxis de paginacion
*
* @var string
*/
private $strPaging;
/**
* constructor
*
* @param int $intDataBase
* @param string $strServer
* @param string $strUser
* @param string $strPassword
* @param string $strDataBase
* @return DBMS
*/
public function DBMS($file)
{
$db_config = parse_ini_file($file);
$this->intDataBase = $db_config["type"];
$this->strServer = $db_config["server"];
$this->strUser = $db_config["user"];
$this->strPassword = $db_config["password"];
$this->strDataBase = $db_config["data_base_name"];
}
public function getTempTable($strTable)
{
switch($this->intDataBase)
{
case 1: $this->getTempTableMysql($strTable); break;
case 2: $this->getTempTablePostgresql($strTable); break;
}
}
private function getTempTablePostgresql($strTable)
{
$this->connect();
$this->result = pg_query("SELECT * FROM ".$strTable);
}
private function getTempTableMysql($strTable)
{
}
/**
* establece conexion con la base de datos
*/
public function connect()
{
if (!isset($this->con))
{
switch ($this->intDataBase)
{
case 1: $this->connectMysql();break;
case 2: $this->connectPostgresql();break;
}
}
}
/**
* finaliza conexion con la base de datos
*/
public function shutdown()
{
if (!isset($this->con))
{
switch ($this->intDataBase)
{
case 1: $this->shutdownMysql();break;
case 2: $this->shutdownPostgresql();break;
}
}
}
private function shutdownMysql()
{
mysql_free_result($this->result);
}
private function shutdownPostgresql()
{
pg_freeresult($this->result);
}
/**
* ejecuta una consulta a la base de datos
*
* @param string $strSql
*/
public function execute($strSql)
{
switch ($this->intDataBase)
{
case 1: $this->result = $this->executeMysql($strSql);break;
case 2: $this->result = $this->executePostgresql($strSql);break;
}
return $this->result;
}
/**
* retorna el numero de filas afectadas por una consulta SQL
*
* @return unknown
*/
public function getNumRows()
{
$intNumRows = 0;
switch ($this->intDataBase)
{
case 1: $intNumRows = $this->getNumRowsMysql();break;
case 2: $intNumRows = $this->getNumRowsPostgresql();break;
}
return $intNumRows;
}
/**
* Retorna un recurso especifico de una base de datos como resultado de una consulta SQL
* @deprecated se removera este metodo para entregarle solo a las otras clases las filas evitando problemas de compatibilidad
* con bases de datos
* @return result
*/
public function getResult()
{
return $this->result;
}
/**
* obtiene el string sql correspondiente para una paginacion
*
* @param int $intStart
* @param int $intLimit
* @return string
*/
public function getStrPaging($intStart,$intLimit)
{
switch($this->intDataBase)
{
case 1: $this->strPaging = $this->getStrPagingMysql($intStart,$intLimit);break;
case 2: $this->strPaging = $this->getStrPagingPostgresql($intStart,$intLimit);break;
}
return $this->strPaging;
}
private function getStrPagingMysql($intStart,$intLimit)
{
if($intStart == 0 && $intLimit == 0)
{
$this->strPaging = "";
}
else
{
$this->strPaging = "LIMIT ".$intStart.",".$intLimit;
}
return $this->strPaging;
}
private function getStrPagingPostgresql($intStart,$intLimit)
{
if($intStart == 0 && $intLimit == 0)
{
$this->strPaging = "";
}
else
{
$this->strPaging = "OFFSET ".$intStart." LIMIT ".$intLimit;
}
return $this->strPaging;
}
/**
* retorna una fila especifica del resultado de una columna
*
* @param int $intRow
* @return row
*/
public function getRowAt($intRow,$strTypeRow)
{
$row="";
switch ($this->intDataBase)
{
case 1: $row = $this->getRowAtMysql($intRow,$strTypeRow);break;
case 2: $row = $this->getRowAtPostgresql($intRow,$strTypeRow);break;
}
return $row;
}
public function createTempTable($strSQL)
{
switch ($this->intDataBase)
{
case 1: $row = $this->createTempTableMysql();break;
case 2: $row = $this->createTempTablePostgresql($strSQL);break; //TODO
}
}
private function createTempTablePostgresql($strSQL)
{
pg_query($strSQL);
}
private function connectMysql()
{
$this->con = mysql_query($this->strServer,$this->strUser,$this->strPassword);
mysql_select_db($this->strDataBase,$this->con);
}
private function connectPostgresql()
{
$strConn = "host=".$this->strServer." port=5432 password = ".$this->strPassword." user = ".$this->strUser."
dbname = ".$this->strDataBase;
$this->con = pg_connect($strConn);
}
private function executeMysql($strSql)
{
$this->result = mysql_query($strSql,$this->con);
return $this->result;
}
private function executePostgresql($strSql)
{
$this->result = @pg_query($this->con,$strSql);
return $this->result;
}
private function getNumRowsMysql()
{
return mysql_num_rows($this->result);
}
private function getNumRowsPostgresql()
{
return pg_num_rows($this->result);
}
/** @todo HACER CAMBIO PARA QUE EL ARREGLO RETORNADO SEA UN ARREGLO ESCALAR */
private function getRowAtMysql($intRow,$strTypeRow)
{
@mysql_data_seek($this->result,$intRow);
return @mysql_fetch_array($this->result);
}
/**
* Guarda en un arreglo bien sea escalar o asociativo todos los elementos de una fila seleccionada de una consulta exitosa
*
* @param array $row fila de una consulta
* @param string $strTypeRow tipo de elementos que desea obtener e=escalar a=asociativo
* @return array
*/
private function pushRowToArray($row,$strTypeRow)
{
$scalarRow = array();
foreach ($row as $key=>$value)
{
if ($strTypeRow == "e")
{
if(is_int($key))
{
$scalarRow[$key] = $value;
}
}
else
{
if(!is_int($key))
{
$scalarRow[$key] = $value;
}
}
}
return $scalarRow;
}
private function getRowAtPostgresql($intRow,$strTypeRow)
{
$row = pg_fetch_array($this->result,$intRow);
return $this->pushRowToArray($row,$strTypeRow);
}
}
?>
la configuracion de los parametros se hace en un INI cuya estructrura es esta
Código INI:
Ver original[data_base]
data_base_name = db_name
server = localhost
user = your_user
password = your_password
type = 2
siendo type=2 mysql y type=1 mysql