Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 17-abr-2008, 09:00   #1 (permalink)
rolandodt ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 4
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-abr-2008 a las 11:04. Razón: tags PHP
rolandodt está desconectado   Responder Citando
Antiguo 17-abr-2008, 11:06   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.600
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.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 24-abr-2008, 12:09   #3 (permalink)
quitos ha deshabilitado el karma
 
Avatar de quitos
 
Fecha de Ingreso: junio-2004
Mensajes: 81
Enviar un mensaje por MSN a quitos
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
quitos está desconectado   Responder Citando
Antiguo 25-abr-2008, 01:59   #4 (permalink)
hernandos está en el buen camino
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 251
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
Fundacion Empresarial - Fundaempresarial
webdelempleo
hernandos está desconectado   Responder Citando
Antiguo 23-may-2008, 06:46   #5 (permalink)
krasburn ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 16
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.
krasburn está desconectado   Responder Citando
Antiguo 23-may-2008, 09:08   #6 (permalink)
zsamer tiene algunos puntos positivos de karma
 
Fecha de Ingreso: noviembre-2003
Mensajes: 764
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-jun-2008 a las 09:43.
zsamer está desconectado   Responder Citando
Antiguo 26-may-2008, 12:51   #7 (permalink)
destor77 está en el buen camino
 
Avatar de destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 1.105
Enviar un mensaje por MSN a destor77 Enviar un mensaje por Yahoo  a destor77
Respuesta: Conexión a MySQL y a SQL Server

yo que vos usaría PDO como te recomendaron
destor77 está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:54.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93