Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Conexión a MySQL y a SQL Server

Estas en el tema de Conexión a MySQL y a SQL Server en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo una aplicación en PHP que se conecta a MySQL y todo funciona correctamenre, tengo otra que se conecta a SQL Server correctamente, uso la ...
  #1 (permalink)  
Antiguo 17/04/2008, 09:00
 
Fecha de Ingreso: junio-2007
Mensajes: 7
Antigüedad: 16 años, 11 meses
Puntos: 0
Conexión a MySQL y a SQL Server

Tengo una aplicación en PHP que se conecta a MySQL y todo funciona correctamenre, tengo otra que se conecta a SQL Server correctamente, uso la misma clase solo que cada una conectandose a su respectivo servidor, pero me pidieron una alicación con MYSQL que constantemente este conaultando una tabla en SQL Server y actualizando en MySQL pero al querer usar la clase de cada conexión, la de SQL Server no se conecta, aqui dejo las clases para cada conexión:
Código PHP:
/////////////////////   mysql.php /////////////////////////////
<?php

//Clase que maneja la conexion con MySql
class DBLayer
{
    var 
$prefix;       //Prefijo de las tablas de la base de datos
    
var $link_id;      //ID de la conexion
    
var $query_result//Resultado del query

    
var $saved_queries = array(); //Querys almacenados
    
var $num_queries 0;         //Cantidad de querys ejecutados

    //Constructor
    
function DBLayer($db_host$db_username$db_password$db_name$db_prefix$p_connect)
    {
        
$this->prefix $db_prefix;

        if (
$p_connect)
            
$this->link_id = @mysql_pconnect($db_host$db_username$db_password);
        else
            
$this->link_id = @mysql_connect($db_host$db_username$db_password);
            
        
        if (
$this->link_id)
        {
            if (@
mysql_select_db($db_name$this->link_id))
                
                return 
$this->link_id;
            else
                
//error('No se pudo abrir la base de datos. Error de MySQL: '.mysql_error(), __FILE__, __LINE__);
                
mysql_error() ;
                
        }
        else
            
//error('No se pudo conectar al servidor de MySQL. Error de MySQL: '.mysql_error(), __FILE__, __LINE__);
            
mysql_error() ;
    }

    
//Ejecuta un query
    
function query($sql$unbuffered false)
    {
        
        if (
$unbuffered)
            
$this->query_result = @mysql_unbuffered_query($sql$this->link_id);
        else
            
$this->query_result = @mysql_query($sql$this->link_id);

        
        if (
$this->query_result)
        {
            ++
$this->num_queries;

            return 
$this->query_result;
        }
        else
        {
            
$this->saved_queries[] = array($sql0);

            return 
false;
        }
    }

    function 
db_query($db_name$sql$unbuffered false)
    {
        
        
$selDb = @mysql_select_db($db_name$this->link_id);

        if (
$unbuffered)
            
$this->query_result = @mysql_unbuffered_query($sql$this->link_id);
        else
            
$this->query_result = @mysql_query($sql$this->link_id);

        
        if (
$this->query_result)
        {
            ++
$this->num_queries;

            return 
$this->query_result;
        }
        else
        {
            
$this->saved_queries[] = array($sql0);

            return 
false;
        }
    }

    
/* Funciones que encapsulan los metods de acceso a MySql de PHP */
    
function select_db($db_name) {
        return @
mysql_select_db($db_name$this->link_id) ;
    }

    function 
result($query_id 0$row 0)
    {
        return (
$query_id) ? @mysql_result($query_id$row) : false;
    }

    function 
fetch_assoc($query_id 0)
    {
        return (
$query_id) ? @mysql_fetch_assoc($query_id) : false;
    }

    function 
fetch_row($query_id 0)
    {
        return (
$query_id) ? @mysql_fetch_row($query_id) : false;
    }

    function 
num_rows($query_id 0)
    {
        return (
$query_id) ? @mysql_num_rows($query_id) : false;
    }

    function 
affected_rows()
    {
        return (
$this->link_id) ? @mysql_affected_rows($this->link_id) : false;
    }

    function 
insert_id()
    {
        
//return ($this->link_id) ? @mysql_insert_id($this->link_id) : false;
        
$result $this->fetch_assoc$this->query('select @@IDENTITY as clave') );
        return 
$result['clave'] ;
    }
    
/* Fin de funciones que encapsulan los metods de acceso a MySql de PHP */

    //Regresa el numero de querys ejecutados
    
function get_num_queries()
    {
        return 
$this->num_queries;
    }

    
//Regresa los querys almacenados
    
function get_saved_queries()
    {
        return 
$this->saved_queries;
    }

    
//Libera el query de memoria
    
function free_result($query_id false)
    {
        return (
$query_id) ? @mysql_free_result($query_id) : false;
    }

    
//Maneja caracteres especiales
    
function escape($str)
    {
        if (
function_exists('mysql_real_escape_string'))
            return 
mysql_real_escape_string($str$this->link_id);
        else
            return 
mysql_escape_string($str);
    }

    
//Regresa el error del query
    
function error()
    {
        
$result['error_sql'] = @current(@end($this->saved_queries));
        
$result['error_no'] = @mysql_errno($this->link_id);
        
$result['error_msg'] = @mysql_error($this->link_id);

        return 
$result;
    }

    
//Cierra la conexion con la base de datos
    
function close()
    {
        if (
$this->link_id)
        {
            if (
$this->query_result)
                @
mysql_free_result($this->query_result);

            return @
mysql_close($this->link_id);
        }
        else
            return 
false;
    }
}


/////////////////////   mssql.php /////////////////////////////
<?php

//Clase que maneja la conexion con MySql
class DBLayer
{
    var 
$prefix;       //Prefijo de las tablas de la base de datos
    
var $link_id;      //ID de la conexion
    
var $query_result//Resultado del query

    
var $saved_queries = array(); //Querys almacenados
    
var $num_queries 0;         //Cantidad de querys ejecutados

    //Constructor
    
function DBLayer($db_host$db_username$db_password$db_name$db_prefix$p_connect)
    {
        
$this->prefix $db_prefix;

        if (
$p_connect)
            
$this->link_id = @mssql_pconnect($db_host$db_username$db_password);
        else
            
$this->link_id = @mssql_connect($db_host$db_username$db_password);
            
        
        if (
$this->link_id)
        {
            if (@
mssql_select_db($db_name$this->link_id))
                
                return 
$this->link_id;
            else
                
//error('No se pudo abrir la base de datos. Error de MySQL: '.mysql_error(), __FILE__, __LINE__);
                
mssql_error() ;
                
        }
        else
            
//error('No se pudo conectar al servidor de MySQL. Error de MySQL: '.mysql_error(), __FILE__, __LINE__);
            
mssql_error() ;
    }

    
//Ejecuta un query
    
function query($sql$unbuffered false)
    {
        
        if (
$unbuffered)
            
$this->query_result = @mysql_unbuffered_query($sql$this->link_id);
        else
            
$this->query_result = @mssql_query($sql$this->link_id);

        
        if (
$this->query_result)
        {
            ++
$this->num_queries;

            return 
$this->query_result;
        }
        else
        {
            
$this->saved_queries[] = array($sql0);

            return 
false;
        }
    }

    
/* Funciones que encapsulan los metods de acceso a MySql de PHP */
    
function result($query_id 0$row 0)
    {
        return (
$query_id) ? @mssql_result($query_id$row) : false;
    }

    function 
fetch_assoc($query_id 0)
    {
        return (
$query_id) ? @mssql_fetch_assoc($query_id) : false;
    }

    function 
fetch_row($query_id 0)
    {
        return (
$query_id) ? @mssql_fetch_row($query_id) : false;
    }

    function 
num_rows($query_id 0)
    {
        return (
$query_id) ? @mssql_num_rows($query_id) : false;
    }

    function 
affected_rows()
    {
        return (
$this->link_id) ? @mssql_affected_rows($this->link_id) : false;
    }

    function 
insert_id()
    {
        
//return ($this->link_id) ? @mysql_insert_id($this->link_id) : false;
        
$result $this->fetch_assoc$this->query('select @@IDENTITY as clave') );
        return 
$result['clave'] ;
    }
    
/* Fin de funciones que encapsulan los metods de acceso a MySql de PHP */

    //Regresa el numero de querys ejecutados
    
function get_num_queries()
    {
        return 
$this->num_queries;
    }

    
//Regresa los querys almacenados
    
function get_saved_queries()
    {
        return 
$this->saved_queries;
    }

    
//Libera el query de memoria
    
function free_result($query_id false)
    {
        return (
$query_id) ? @mssql_free_result($query_id) : false;
    }

    
//Maneja caracteres especiales
    
function escape($str)
    {
        if (
function_exists('mysql_real_escape_string'))
            return 
mysql_real_escape_string($str$this->link_id);
        else
            return 
mysql_escape_string($str);
    }

    
//Regresa el error del query
    
function error()
    {
        
$result['error_sql'] = @current(@end($this->saved_queries));
        
$result['error_no'] = @mysql_errno($this->link_id);
        
$result['error_msg'] = @mysql_error($this->link_id);

        return 
$result;
    }

    
//Cierra la conexion con la base de datos
    
function close()
    {
        if (
$this->link_id)
        {
            if (
$this->query_result)
                @
mssql_free_result($this->query_result);

            return @
mssql_close($this->link_id);
        }
        else
            return 
false;
    }
}
//////////////////////////////////////
Mi aplicación primero se conecta a MySQL para validación de usuarios :
Código PHP:
require 'datos_conn.php';
require_once(
'../Clases/lib/mysql.php') ;
$dbCon = new DBLayer($db_host$db_username$db_password$db_name''$p_connect); 
Pero al querer conectarme a SQL Server mediante su clase, (incluso ya le cambie en nombre a la clase) pues nomas no se conecta.

Espero que alguien me pueda guiar en esto. De antemano Gracias

Última edición por GatorV; 17/04/2008 a las 11:04 Razón: tags PHP
  #2 (permalink)  
Antiguo 17/04/2008, 11:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Conexión a MySQL y a SQL Server

Hola rolandodt,

La clase que pones, te servirá únicamente para MySQL, ya que usa la librería de MySQL para conectarse.

Para conectarte a MSSQL debes de usar la librería adecuada (funciones mssql_connect, mssql_query, etc.).

Saludos.

Tema trasladado a PHP Orientado a Objetos.
  #3 (permalink)  
Antiguo 24/04/2008, 12:09
Avatar de quitos  
Fecha de Ingreso: junio-2004
Mensajes: 119
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Conexión a MySQL y a SQL Server

Yo te recomendaria usar las liberias de ADODB para php, con eso creas 2 conexiones y vas llamandolas y con eso todo lo demas ya no cambia y kedaria standarizado como lo pretendes hacer.

http://adodb.sourceforge.net/#download
  #4 (permalink)  
Antiguo 25/04/2008, 01:59
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 4
Re: Conexión a MySQL y a SQL Server

Existe otra muy buena opcion para la abstraccion de la base de datos, DB y MDB de PEAR.

http://pear.php.net/package/DB/redirected
__________________
Hernando Saenz Sanchez
  #5 (permalink)  
Antiguo 23/05/2008, 06:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 16
Antigüedad: 16 años
Puntos: 0
Respuesta: Conexión a MySQL y a SQL Server

Yo tambien te recomendaria el uso de la libreria adodb para la conexion. Ademas crearia una clase para cada tipo de conexion. o sea, una para SQL Server y otra para MySQL.
  #6 (permalink)  
Antiguo 23/05/2008, 09:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Re: Conexión a MySQL y a SQL Server

Cita:
Iniciado por hernandos Ver Mensaje
Existe otra muy buena opcion para la abstraccion de la base de datos, DB y MDB de PEAR.

http://pear.php.net/package/DB/redirected
Tanto ADODB como MDB de PEAR están obsoletas, deberían utilizar PDO que biene en PHP5, o bien algún ORM como el de Zend Framework (Zend_Db_Table) o Propel o Doctrine (Las tres utilizan PDO).

Última edición por zsamer; 02/06/2008 a las 09:43
  #7 (permalink)  
Antiguo 26/05/2008, 12:51
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Conexión a MySQL y a SQL Server

yo que vos usaría PDO como te recomendaron
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:10.