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

Conexion PHP5 Debatir

Estas en el tema de Conexion PHP5 Debatir en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos es que hice esta conexion en php y me gustaria saber su opinion en cuanto a seguridad velocidad y manejo. y como podria ...
  #1 (permalink)  
Antiguo 23/09/2009, 13:00
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 4 meses
Puntos: 15
Información Conexion PHP5 Debatir

Hola amigos es que hice esta conexion en php y me gustaria saber su opinion en cuanto a seguridad velocidad y manejo.

y como podria mejorarla en cuanto a seguridad, velocidad y manejo

Muchas Gracias.
Código PHP:
<?php 

    
class connex_cim
    
{
        protected 
$user;
        protected 
$cla;
        protected 
$db;
        protected 
$server;
        protected 
$conex;
        
    function 
__construct()
    {
        
$this->user='usuario';
        
$this->cla='clave';
        
$this->db='base_datos';
        
$this->server='localhost';
        
        
$this->conex = (mysql_connect($this->server,$this->user,$this->cla)) or die(mysql_error());  
          
mysql_select_db($this->db,$this->conex) or die(mysql_error());  
        
    }
    
    public function 
consulta($consulta)
    {
        
$resultado mysql_query($consulta,$this->conex);
        if(!
$resultado)
        {
            
$resultado 'Error de Consulta: '.' '.mysql_error();
            exit;
        }
        
        return 
$resultado;                
    }
    
    
    public function 
assoc($consulta)
    {
        return 
mysql_fetch_assoc($consulta);
    }
    
    
    public function 
num($consulta)
    {
        return 
mysql_num_rows($consulta);
    }
    
    
    public function 
cerrar($consulta)
    {
        
mysql_free_result($consulta); 
        return 
mysql_close();
    }
    
    
    }

?>
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #2 (permalink)  
Antiguo 23/09/2009, 13:08
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 19 años, 3 meses
Puntos: 55
Respuesta: Conexion PHP5 Debatir

deberias aplicar el patron singleton, con esto puedes tener multiples conexiones lo cual es muy contraproducente!
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 23/09/2009, 13:53
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 4 meses
Puntos: 70
Respuesta: Conexion PHP5 Debatir

Sólo digo xD...

Los atributos en las clases deben ser privados, si o sí.

Y pues en general... bien.

Pero si te tomas la tarea de realizar una clase para una conexión a un DB, sería bueno que lo hicieras para diferentes motores no?


Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 23/09/2009, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Conexion PHP5 Debatir

Tema trasladado desde PHP General.
  #5 (permalink)  
Antiguo 23/09/2009, 17:13
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: Conexion PHP5 Debatir

te faltan cosas basicas como saber el ultimo Id, y tiene un fallo logico.

Código PHP:
    public function consulta($consulta
    { 
        
$resultado mysql_query($consulta,$this->conex); 
        if(!
$resultado
        { 
            
$resultado 'Error de Consulta: '.' '.mysql_error(); 
            exit; 
        } 
         
        return 
$resultado;                 
    } 
si hay un error en la consulta, se ejecuta el if, guardas el error en la variable $resultado, posteriormente haces exit(); ahi el error logico, todo se detiene, por consiguiente nunca retornas el error si llegase a existir, se me hace que no la has sometido a pruebas.

esto es una sugerencia nada mas:
Código PHP:
    function __construct() 
    { 
        
$this->user='usuario'
        
$this->cla='clave'
        
$this->db='base_datos'
        
$this->server='localhost'
         
        
$this->conex = (mysql_connect($this->server,$this->user,$this->cla)) or die(mysql_error());   
          
mysql_select_db($this->db,$this->conex) or die(mysql_error());   
         
    } 
no veo porque asignar una variable para cada valor(usuario, clave, base de datos, servidor) si estan protegidas, el usuario no las puede modificar desde afuera, y solo las ocupas en un metodo, lo que me parece algo "inutilisable", y en mi opinion eso debe ser modificable, sea por X razon el usuario pueda necesitar cambiar de servidor de base de datos, deberian ser publicas :P
  #6 (permalink)  
Antiguo 23/09/2009, 18:42
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Conexion PHP5 Debatir

Lo del exit no me habia fijado, y lo de las variables mm, quice hacerlo de forma protegida podria hacer un metodo para la conexion donde le asigne la conexion a un tributo y otro metodo publico como un tipo set para cambiar el valor del atributo clave que nicializacion en el constructor con datos por defecto creo algo como esto no se que tal quede

seria algo como esto:



Asi si quedaria Mejor?
Código PHP:
class connex
{
        protected 
$user;
        protected 
$cla;
        protected 
$db;
        protected 
$server;
        protected 
$conex;
        
    function 
__construct()
    {
        
$this->user='user';
        
$this->cla='clave';
        
$this->db='base_datos';
        
$this->server='servidor';
    }
    
    
    protected function 
conectando()
    {
        
$this->conex = (mysql_connect($this->server,$this->user,$this->cla)) or die(mysql_error());  
          
mysql_select_db($this->db,$this->conex) or die(mysql_error());  
    }
    
    public function 
setUser(pUser)
    {
        
$this->user=pUser;
    }
    
    public function 
setCla(pCla)
    {
        
$this->cla=pCla;
    }
    
    public function 
setDb(pDb)
    {
        
$this->db=pDb;
    }
    
    public function 
setServer(pServer)
    {
        
$this->server=pServer;
    }
    
    public function 
consulta($consulta)
    {
        
$resultado mysql_query($consulta,$this->conex);
        if(!
$resultado)
        {
            
$resultado 'Error de Consulta: '.' '.mysql_error();
        }
        
        return 
$resultado;                
    }
    
    
    public function 
assoc($consulta)
    {
        return 
mysql_fetch_assoc($consulta);
    }
    
    
    public function 
num($consulta)
    {
        return 
mysql_num_rows($consulta);
    }
    
    
    public function 
cerrar($consulta)
    {
        
mysql_free_result($consulta); 
        return 
mysql_close();
    }
    
    

__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #7 (permalink)  
Antiguo 23/09/2009, 18:45
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: Conexion PHP5 Debatir

deberias poner en el constructor la conexion, llamar un metodo para conectar me parece trabajoso hasta cierto punto, pudiendose evitar, y insisto, deberian ser publicas xD, y cada vez que queiras cambiar de servidor, solo llamar al constructor, bueno, a fin de cuentas deberias hacer tu objeto de acorde a tus necesidades :P
  #8 (permalink)  
Antiguo 23/09/2009, 19:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Conexion PHP5 Debatir

@rudy69

No, no deben de ser publicas, rompes con todo el concepto de encapsulamiento, que dice que las variables NO deben de ser publicas.

Saludos.
  #9 (permalink)  
Antiguo 23/09/2009, 20:22
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: Conexion PHP5 Debatir

Cita:
Iniciado por rudy69 Ver Mensaje
deberias poner en el constructor la conexion, llamar un metodo para conectar me parece trabajoso hasta cierto punto, pudiendose evitar, y insisto, deberian ser publicas xD, y cada vez que queiras cambiar de servidor, solo llamar al constructor, bueno, a fin de cuentas deberias hacer tu objeto de acorde a tus necesidades :P
Conceptualmente, hacer atributos públicos está "prohibido" desde casi los inicios de la POO.

Revisa los conceptos base de la OO y los verás
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 24/09/2009, 12:16
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: Conexion PHP5 Debatir

vale vale xD

Quiero decir que deberia agregar un metodo que te permita cambiar de base de datos, o mas bien, te permita elegir esos valores :S, aunque si es una clase personalizada, asi esta bien xD, whatever XD

Última edición por rudy69; 24/09/2009 a las 12:21
  #11 (permalink)  
Antiguo 24/09/2009, 14:54
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: Conexion PHP5 Debatir

Cita:
Iniciado por rudy69 Ver Mensaje
vale vale xD

Quiero decir que deberia agregar un metodo que te permita cambiar de base de datos, o mas bien, te permita elegir esos valores :S, aunque si es una clase personalizada, asi esta bien xD, whatever XD
Te digo más, si te guías por el gurú Martin Fowler (de libros como "UML Gota a Gota"), deberíamos llegar al extremo de evitar todo lo posible los get/set y trabajar sólo con métodos puros (es decir, no hacer una "trampa" para acceder con set/get a los atributos, dejarlos ocultos dentro del objeto y que no se tenga acceso directo desde el exterior).

Es como hablar con Richard Stallman, pero bueno, la referencia sirve para entender cual mal es el uso de atributos públicos, y cómo usando un get/set generamos también un efecto de "público", y con un solo get o set generamos el 50% de público.

Artículos sugeridos


Saludos
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #12 (permalink)  
Antiguo 24/09/2009, 17:30
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Conexion PHP5 Debatir

Si por eso mas bien hize los metodos publicos set y get para cambiar el servidor, clave, usuario y db, no veo tanto problema por lo que si cambiar el servidor o alguna clave con el set no van a afectar mi servidor o eso creo ya que no estaria apuntando a ningun lado, y los atributos no me gusta hacerlos publicos.

Una ultima cosa el segundo codigo si quedo mejor? o sigo trabajando con el primero que puse?? Gracias.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #13 (permalink)  
Antiguo 26/09/2009, 12:20
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: Conexion PHP5 Debatir

Tiene otro error logico (que no te voy a decir, porque es prueba que no lo has sometido a pruebas xD), y en este caso tiene mas de uno xD

enriqueplace, esta muy interesante lo que me has pasado, te lo agradesco, yo de objetos apenas voy entendiendolo que es su uso, como construirlo de manera correcta creo ni haber empezado xD, pero tengo una pregunta.

Tengo un obj cuyo fin es crear una tabla/s, tengo unas variables publicas, $head(array) y $foot(array), $query (string) y $data (objeto o un array), las dos ultimas son lo que contendra el cuerpo, la ultima es privada.
se ingresa de manera directa los contenidos de las cabeceras, y se llama una funcion Display y imprime la tabla y vacia todas las variables por si el usuario quiere imprimir otra tabla con el mismo objeto, en otras palabras, despues de llamar display, el objeto vuelve a su estado inicial, el objeto depende directamente de los datos externos aun asi, mi pregunta es hay que usar getter/setter?, me parece ya una cuestión de formalidad o estandar, y eso vale oro.

Se me han ocurrido otras maneras de hacer el objeto, como para cada tabla tener un objeto(no me refiero a clases), con sus propios características y es por la que me estoy inclinando ahora pues aveces me topo con tablas mas complejas, aunque es difícil crear algo que satisfaga todas las necesidades, resumido es un solo rollo xD, me canso jeje
  #14 (permalink)  
Antiguo 26/09/2009, 17:23
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Conexion PHP5 Debatir

claro no hago el return mmmm buena idea, voy a mejorar la conexión quiero que sea lo mejor posible, rápida y segura, muchas gracias a todos y se me olvidaba deberíamos establecer precios los que trabajamos con sitios web ya que muchos no cobran lo que verdaderamente vale nuestro esfuerzo este tema deberíamos tratarlos todos los webmaster y hacer una organización o una estandarizar de precios no se como les suene la idea?.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #15 (permalink)  
Antiguo 26/09/2009, 17:49
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: Conexion PHP5 Debatir

No se si yo este mal, porque tampoco lo he probado, pero lo estoy mirando y estoy 99% seguro que seria asi:

Código PHP:
    class connex_cim
    
{
        protected 
$user;
        protected 
$cla;
        protected 
$db;
        protected 
$server;
        protected 
$conex;
        private 
$resultado;

    public function 
consulta($consulta)
    {
        
$this->resultado mysql_query($consulta,$this->conex);
        if(!
$this->resultado)
        {
            
$this->resultado 'Error de Consulta: '.' '.mysql_error();
        }
        
        return 
$this->resultado;                
    }
    
    
    public function 
assoc()
    {
        return 
mysql_fetch_assoc($this->resultado);
    } 

arreglo solo uno de varios, porque hay mas de uno xD

Y lo de tu idea, creo que tu tendrias que pagarme a mi por dejarte "trabajar" en mi proyecto xDDDDDD, estoy bromeando
  #16 (permalink)  
Antiguo 26/09/2009, 18:16
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Conexion PHP5 Debatir

Hola,

Esto es algo que siempre me intriga en PHP:

¿Como puedo saber si ocurrió un error en la consulta?
Es decir ... ¿al usar esa clase tengo que hacer algo como esto?

$r = A->consulta("selectt * from data");
if ($r != ... ¿Que cosa?)

Saludos,

Última edición por HackmanC; 26/09/2009 a las 20:43 Razón: quitar algo
  #17 (permalink)  
Antiguo 26/09/2009, 22:19
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: Conexion PHP5 Debatir

podrias hacer la consulta algo asi para facilitar el manejo despues...

Código php:
Ver original
  1. class MySQL
  2. {
  3.     // propiedades....
  4.  
  5.     public
  6.         $link,
  7.         $result,
  8.         $query_error = false,
  9.         $affected_rows,
  10.         $last_id,
  11.         $query_result,
  12.         $rows;
  13.  
  14.     // constructor, metodos, etc.
  15.  
  16.     public function query($sentence = '')
  17.     {
  18.         if (!$this->link) return exit(mysql_error($this->link));
  19.         $this->result = @mysql_query($sentence, $this->link);
  20.         if (!$this->result) {
  21.             $this->query_error = true;
  22.             return exit(mysql_error($this->link));
  23.         }
  24.        
  25.         $this->affected_rows = mysql_affected_rows($this->link);
  26.        
  27.         if (preg_match('/^\s*(insert|replace)(.+)/is',$sentence)) $this->last_id = mysql_insert_id($this->link);
  28.        
  29.         if (preg_match('/^\s*(select|replace)(.+)/is',$sentence))
  30.         {
  31.             $rows = 0;
  32.             while ($row = mysql_fetch_object($this->result)) {
  33.                 $this->query_result[$rows] = $row;
  34.                 ++$rows;
  35.             }
  36.         }
  37.        
  38.         @mysql_free_result($this->result);
  39.        
  40.         if ($this->query_error) $this->query_error = false;
  41.        
  42.         $this->rows = $rows;
  43.         return true;
  44.     }
  45. }

despues para manejar los datos de las consultas seria... por ej.:

Código php:
Ver original
  1. $MySQL = new MySQL(//blablabla);
  2.  
  3. $MySQL->query("SELECT titulo,contenido,fecha FROM noticias");
  4.  
  5. if ($MySQL->affected_rows < 1) print 'No hay noticias... ';
  6. else {
  7.     foreach ($MySQL->query_result as $row) {
  8.         print '<h1>' .$row->titulo. '</h1>';
  9.         print '<div>' .$row->contenido. '</div>';
  10.         print '<span>' .$row->fecha. '</span>';
  11.     }
  12. }

espero que te sirva... saludos.
  #18 (permalink)  
Antiguo 26/09/2009, 23:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Conexion PHP5 Debatir

@HackmanC, para eso precisamente sirven las excepciones, te permiten hacer el control de flujo de tu script y lanzar una excepcion cuando sea detectado un error.

Saludos.
  #19 (permalink)  
Antiguo 10/10/2009, 23:38
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 4 meses
Puntos: 15
Pregunta Respuesta: Conexion PHP5 Debatir

Amigos la verdad me canse de buscar cual era el error no se que fue gracias por ayudarme este es el codigo de la conexion

Código PHP:
<?php

class connex 
{
    protected 
$user;
    protected 
$cla;
    protected 
$db;
    protected 
$servidor;
    protected 
$total;
    protected 
$conexion;
    
    function 
__construct()
    {
        
$this->user='user';
        
$this->cla='clave';
        
$this->db='base_datos';
        
$this->servidor='servidor';
        
$this->total=0;
        
$this->conexion=(mysql_connect($this->servidor$this->user$this->cla)) or die("Error de conexion");
        
mysql_select_db($this->db,$this->conexion) or die("Error de Base de datos ".mysql_error());
        if(!isset(
$this->conexion))
        {
            echo 
"Error conexion";
            exit;
        }
    }
    
    public function 
setUser($pUser)
    {
        
$this->user $pUser;
    }
    
    public function 
setCla($pCla)
    {
        
$this->cla $pCla;
    }
    
    public function 
setDb($pDb)
    {
        
$this->db $pDb;
    }
    
    public function 
setServidor($pServidor)
    {
        
$this->servidor $pServidor;
    }
    
    public function 
conex()
    {
        
$this->conexion = (mysql_connect($this->servidor$this->user$this->cla)) or die(mysql_error());
        
mysql_select_db($this->db,$this->conexion) or die(mysql_error());
        if(!isset(
$this->conexion))
        {
            echo 
"Error conexion";
            exit;
        }
        return 
$this->conexion;
    }
    
    public function 
consulta($pConsulta)
    {
        
$this->total++;
        return 
mysql_query($pConsulta,$this->conexion);
    }
    
    public function 
row($pConsulta)
    {
        return 
mysql_fetch_array($pConsulta);
    }
    
    public function 
num($pConsulta)
    {
        return 
mysql_num_rows($pConsulta);
    }
    
    public function 
cerrar()
    {
        return 
mysql_close($this->conexion);
    }
    
    public function 
totalConsultas()
    {
        return 
$this->total;
    }
    
}


?>
y bueno en un servidor apache con el que trabajo en un lado me funcionaba bien pero llegue aqui a otro equipo y el easy php no me lo reconoce bien me aparece este error

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\Server\www\cim\conex\connex.php on line 68

no se que puede ser gracias por ayudarme, esto viene del codigo que habia comentado le hize unos arreglos y empeze a hacerle pruebas y me salio este error
bueno gracias amigos por ayudarme.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #20 (permalink)  
Antiguo 12/10/2009, 07:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Conexion PHP5 Debatir

Ese error sale cuando tienes un error en una consulta, imprime el valor de mysql_error() para que puedas determinar la causa.

Saludos.
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:23.