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

Crear funcion para realizar sentencias sql

Estas en el tema de Crear funcion para realizar sentencias sql en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, he visto en muchos scripts que los programadores php suelen crear funciones para realizar sentencias a la bd y no lo hacen de manera ...
  #1 (permalink)  
Antiguo 29/03/2009, 05:35
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Pregunta Crear funcion para realizar sentencias sql

Hola, he visto en muchos scripts que los programadores php suelen crear funciones para realizar sentencias a la bd y no lo hacen de manera directa utilizando "mysql_query", mi duda es ¿Deberia cambiar todo mi codigo, crear una funcion para realizar sentencias sql (claro, teniendo mas control) y añadir esta funcion en todas las paginas?

Gracias
  #2 (permalink)  
Antiguo 29/03/2009, 10:35
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Crear funcion para realizar sentencias sql

Cuate, me acabas de dar una gran idea jajaja, porque no se me ocurrio antes, es mas facil asi!!!!.

Estaba arto de escribir mysql_query tantas veces xD,

Pos yo que tu lo haria, te ahorra texto, yo he creado una funcion que pasa fechas en formato yyyy-mm-dd a mm-dd-yyyy y es muy util, y viceversa.

funciones para redondear numeros, y muchas cosas mas, ire a hacer mi funcion ahora mismo XD
  #3 (permalink)  
Antiguo 29/03/2009, 10:38
Avatar de pacmanaman  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Crear funcion para realizar sentencias sql

Ý tener una clase especifica para manejarse con la base de datos seria ideal ( digo ) e incluiarla en cada page que estes utilizando sql, esto te sirve para mas proligidad y en caso de que labures con mas programadores y queres abstraer un poco el contacto directo con la base!

Te paso las funciones a utilizar, en base a las mismas creas tu clase ...

mysql_connect: Realizamos la conexión donde se encuentra alojada la BD.

$servidor = "127.0.0.1";
$usuario = "root";
$clave = "admin";

$miconexion = mysql_connect($servidor,$usuario,$clave);

mysql_close: Cerramos la conexión asociada al parametro pasado.

mysql_close($miconexion);

mysql_select_db: Con esto seleccionamos con la base de datos que queremos trabajar.

mysql_select_db("MiBase",$miconexion);

mysql_query: Realizamos una consulta a la base de datos que hacemos referencia en la conexión asociada.

$consulta = "SELECT * FROM nombre_tabla";
$resultado_consulta = mysql_query($consulta,$miconexion) ;

mysql_result: Nos devuelve una campo en particular del resultado de la consulta.

$resulta_devuelto = mysql_result($resultado_consulta,x,y);

// Siendo x e y un número entero

mysql_fetch_array: Tiene el conjunto de datos asociados a el resultado de la consulta.

while($fila = mysql_fetch_array($resultado_consulta))
{
echo $fila["nombre_campo"];
}

mysql_num_rows: Contiene la cantidad de registros que dispone el resultado de la consulta.

$cantidad_filas = mysql_num_rows($resultado_consulta);

mysql_field_name: Devuelve el nombre del campo especificado en un resultado.

$campo = mysql_field_name($consulta, x);

Siendo x un número entero, tener en cuenta la cantidad de campos que devuelve la consulta.

mysql_field_type: Nos muestra el tipo de dato que utiliza la columna especificada.

$campo = mysql_field_type($consulta, x);

mysql_create_db y mysql_drop_db: Crear/Eliminar una base de datos asociada a la conexión especificada.

mysql_create_db("mibase",$miconexion);
mysql_drop_db("mibase",$miconexion);
  #4 (permalink)  
Antiguo 05/04/2009, 08:28
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Pregunta Respuesta: Crear funcion para realizar sentencias sql

Hola pacmanaman, gracias por tu idea!, ya he creado mi propio manejador de mysql, esto es lo que llevo por el momento:
Código PHP:
    /*----
        - Manejador de mysql.
        @ Version 1.0 por Zamblo.
    ----*/
    
    
class mysql
    
{
        var 
$conexion;
        var 
$conexion_servidor"localhost";
        var 
$conexion_usuario"zamblo";
        var 
$conexion_contrasena"pass";
        var 
$conexion_bd"pokemonrpg";
        
        
//Realizar conexion a la base de datos
        
function Conectar()
        {
            
$this->conexionmysql_connect($this->conexion_servidor$this->conexion_usuario$this->conexion_contrasena);
            
mysql_select_db($this->conexion_bd$this->conexion);
            
mysql_query ("SET NAMES 'utf8'");
        }
        
//Realizar consulta a la base de datos
        
function Consulta($datos)
        {
            
mysql_query($datos$this->conexion) or die(mysql_error());
        }
        
//Devolver resultado de un campo de consulta a la base de datos
        
function ResultadoConsulta($datos)
        {
            
$resultadomysql_result(mysql_query($datos), 0) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver array de datos de consulta a la base de datos
        
function ArrayConsulta($datos)
        {
            
$resultadomysql_fetch_array(mysql_query($datos)) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver numero de filas de consulta a la base de datos
        
function FilasConsulta($datos)
        {
            
$resultadomysql_num_rows(mysql_query($datos)) or die(mysql_error());
            
            return 
$resultado;
        }
    } 
Pero ahora tengo un conflicto, resulta que tengo que declarar la clase en todas mis funciones (ya que declaro cada funcion en un archivo diferente) y cuando uso 2 funciones en la misma pagina, la clase se declara 2 veces y por lo tanto devuelve error... ¿Que peudo hacer para arreglarlo? esque encima, si declaro la clase en la pagina donde luego incluyo las funciones, las funciones me dicen que la clase no esta definida!! osea debe estar definida en la propia funcion,,, ¿Que arreglo hay?

Muchas gracias!
  #5 (permalink)  
Antiguo 05/04/2009, 11:17
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
Respuesta: Crear funcion para realizar sentencias sql

Puedes usar include_once, o require_once para solo incluirla una vez.

Saludos.
  #6 (permalink)  
Antiguo 05/04/2009, 12:37
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Muchas gracias GatorV

Bueno, la cosa esque me sige llendo mal...

Compruebo con isset si ya se ha creado una instancia de la clase, si no se ha hecho, incluyo la clase y creo instancia y si no nada,
Pero aun asi sige funcionando mal,

Si lo hago con el include once ¿Como hago tambien para crear instancia de la clase si la clase ya estaba instanciada o no?

Muchas gracias

Última edición por GatorV; 05/04/2009 a las 19:02
  #7 (permalink)  
Antiguo 05/04/2009, 17:10
Avatar de pacmanaman  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Crear funcion para realizar sentencias sql

En vez de usar la clase en cada una de las funciones, podrias usar la clase en las paginas donde usas las funciones, para que no se cree el conflicto!

include(funcion.php);
include(mysql.class.php);
  #8 (permalink)  
Antiguo 09/04/2009, 04:44
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Respuesta: Crear funcion para realizar sentencias sql

Hola, gracias por contestar.

Asi estaba al principio, pero independientemente de que una funcion este incluida en el archivo donde se incluye tambien la clase o no, se necesita incluir la clase en cada funcion, sino, da error....

Bueno por favor necesito ayuda.

Muchas gracias.
  #9 (permalink)  
Antiguo 10/04/2009, 05:10
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Respuesta: Crear funcion para realizar sentencias sql

¿Nadie tiene respuesta a mi problema?

Gracias.
  #10 (permalink)  
Antiguo 10/04/2009, 06:55
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Respuesta: Crear funcion para realizar sentencias sql

Bueno, lo explicare de nuevo tal vez no me haya explicado con claridad...

1º Tengo una clase que utilizo para operar con la base de datos mysql, y incluyo y declaro en todas mis funciones donde utilize mysql, y tambien en mi pagina index.php donde van a parar todas las funciones, es esta:
Código PHP:
<?php
    
/*----
        - Manejador de mysql.
        @ Version 1.0 por Zamblo.
    ----*/
    
    
class mysql
    
{
        var 
$conexion;
        var 
$conexion_servidor"localhost";
        var 
$conexion_usuario"zamblo";
        var 
$conexion_contrasena"pass";
        var 
$conexion_bd"pokemonrpg";
        
        
//Realizar conexion a la base de datos
        
function Conectar()
        {
            
$this->conexionmysql_connect($this->conexion_servidor$this->conexion_usuario$this->conexion_contrasena);
            
mysql_select_db($this->conexion_bd$this->conexion);
            
mysql_query ("SET NAMES 'utf8'");
        }
        
//Realizar consulta a la base de datos
        
function Consulta($datos)
        {
            
$resultadmysql_query($datos$this->conexion) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver resultado de un campo de consulta a la base de datos
        
function ResultadoConsulta($datos)
        {
            
$resultadomysql_result(mysql_query($datos), 0) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver array de datos de consulta a la base de datos
        
function ArrayConsulta($datos)
        {
            
$resultadomysql_fetch_array(mysql_query($datos)) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver numero de filas de consulta a la base de datos
        
function FilasConsulta($datos)
        {
            
$resultadomysql_num_rows(mysql_query($datos)) or die(mysql_error());
            
            return 
$resultado;
        }
    }
?>
2º Esta clase la incluyo y la defino en mi fichero index.php, y utilizo el metodo Conectar() para hacer un mysql_connect y un mysqL-select_db, por lo tanto siempre estare conectado a la bd, esta es la cabezera de mi archivo index.php:
Código PHP:
//Mysql
    
require("clases/mysql.php");
    
$mysql= new mysql;
    
$mysql->Conectar(); 
3º Mas abajo de mi archivo index.php (Despues de haber incluido, declarado una instancia y utilizado el metodo Conectar()) utilizo una funcion para hacer una comprobacion de las cookies del usuario, donde vuelvo a necesitar la clase mysql, esta es la funcion:
Código PHP:
<?php
    
/*---
        - Comprobar si el usuario esta logeado en el sistema.
        @ Version 1.0 por Zamblo.
    ---*/
    
    //Manejador de mysql
    
include_once("clases/mysql.php");
    if (!isset(
$mysql)) $mysql= new mysql;
    
    function 
ComprobarCookies()
    {
        if (isset(
$_COOKIE["pokemonrpg_jugador_id"]) and isset($_COOKIE["pokemonrpg_jugador_cuenta"]) and isset($_COOKIE["pokemonrpg_jugador_contrasena"]) and isset($_COOKIE["pokemonrpg_jugador_entrenador"]))
        {
            
$cuenta$mysql->DevolverArray("SELECT id, nombre, contrasena FROM pokemonrpg_cuenta  WHERE id='".$_COOKIE["pokemonrpg_jugador_id"]."'");
            if (
$cuenta["contrasena"]== $_COOKIE["pokemonrpg_jugador_contrasena"])
                return 
true;
            else
                return 
false;
        }
        else
            return 
false;
    }
?>
¿El problema? Cuando se ejecuta la funcion me arroja el siguiente error:
Código:
Fatal error: Call to a member function DevolverArray() on a non-object in C:\Wamp\www\Pokemonrpg\funciones\ComprobarCookies.php on line 15
La linea 15 de ComprobarCookies es:
Código PHP:
$cuenta$mysql->DevolverArray("SELECT id, nombre, contrasena FROM pokemonrpg_cuenta  WHERE id='".$_COOKIE["pokemonrpg_jugador_id"]."'"); 
¿Que hay mal aqui?

Muchas gracias!
  #11 (permalink)  
Antiguo 10/04/2009, 07:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Crear funcion para realizar sentencias sql

Tu problema es que tenes que llamar al objeto $mysql dentro de la funcion, o hacer $mysql global en la funcion...

no estoy seguro, peroaun creo q por defecto las variables son locales... jeje

y otra cosa... para hacer todo mas rapido y escribir menos jeje,

crea la conexion mysql desde el cosntructor de la clase:

Código PHP:
<?php
class mysql
{
    
// ...
    // PHP 4 (poniendole el mismo nombre q la clase)
    
function mysql ()
    {
        
$this -> Conectar () ;
    }
    
// PHP5
    
function __construct ( ... )
    {
        
$this -> Conectar () ;
    }
    
// ...
}
?>
entonces despues se conectara solamente inicalizando el objeto...

Código PHP:
<?php

$mysql 
= new mysql () ; // Y ya te conectaste...

?>
saludos...

Última edición por thepancher; 10/04/2009 a las 07:19
  #12 (permalink)  
Antiguo 10/04/2009, 13:42
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 8 meses
Puntos: 5
Muchas gracias Thepancher, resuelto!

Saludos

Cita:
Iniciado por astut Ver Mensaje
Muchas gracias Thepancher, resuelto!

Saludos
Hola, tengo otro problema relativo a dos metodos que uso en mi clase, son estos dos:
Código PHP:
function Consulta($datos)
        {
            
$resultadmysql_query($datos$this->conexion) or die(mysql_error());
            
            return 
$resultado;
        }
        
//Devolver array de datos de consulta a la base de datos
        
function ArrayConsulta($consulta)
        {
            
$resultadomysql_fetch_array($consulta) or die(mysql_error());
            
            return 
$resultado;
        } 
La cosa esque cuando utilizo Consulta y luego ArrayConsulta con el valor devuelto de Consulta me da error, esto es lo que ago:
Código PHP:
$consulta$mysql->Consulta("SELECT * FROM pokemonrpg_pokemoncapturado WHERE NOT _objeto IS NULL AND _equipo_posicion<= 6 AND _entrenador='".$_COOKIE["pokemonrpg_jugador_entrenador"]."'");
$arrayconsulta$mysql->ArrayConsulta($consulta
Y este el error:
Código:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Vamos que lo que me devuelve Consulta no es un tipo valido para utilizarlo en ArrayConsulta, ¿Cual es el problema?

Un saludo y muchas gracias!

Última edición por GatorV; 11/04/2009 a las 22:49
  #13 (permalink)  
Antiguo 10/04/2009, 16:31
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Crear funcion para realizar sentencias sql

mmmm no veo ningún método de tu clase con el nombre DevolverArray(), no creo que sea muy ciego(si lo soy sorry jajaja).

deberías declarar el nombre de dicha clase con otro nombre(valga la redundancia), ya que php 5 tiene una clase con ese nombre y vas a tener conflictos (en mi caso alguna vez lo tuve).

a partir de la versión 5 ya no se utiliza var, por defecto el modificador es public.

no estaría por demás si repasas conceptos de POO.

suerte.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #14 (permalink)  
Antiguo 10/04/2009, 16:34
Avatar de ale123  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 8 meses
Puntos: 3
Respuesta: Crear funcion para realizar sentencias sql

Ahora, por ejemplo, para hacer un query segun astut deberiamos poner Consulta("aca el query");

Mi pregunta es: ¿No es lo mismo hacer mysql_query() que Consulta()?

Digo, cual es la diferencia? Por que si conlleva al mismo resultado, para que estamos creando una funcion con el mismo fin?

Espero sus respuestas

Desde ya muchas gracias
  #15 (permalink)  
Antiguo 10/04/2009, 21:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Crear funcion para realizar sentencias sql

ale123 tiene razon... pero no esta mal, ya que podes agregarle algo a la funcion Consulta, para primero hacer la consulta "segura"....

por el tema del sql injected etc....

leete esto: ar.php.net/manual/es/function.mysql-real-escape-string.php

mirate atentamente a los ejemplos q te dan alli, y si ves algun comentario interesante, ehcale un ojo ;)

y hace como yo, que soy casi nuevo a php, empece hace solo 6 meses... cada vez q t encuentres con una funcion q no conoscas, buscala en la documentacion de php, y trata de entenderla por completo... si es necesario, hace pruebas con esa funcion, q con practica se aprende al toke :P eso es lo bueno de php es q es facil y aprendes a los pocos instantes...

saludos!
  #16 (permalink)  
Antiguo 11/04/2009, 18:07
 
Fecha de Ingreso: julio-2007
Ubicación: México DF
Mensajes: 57
Antigüedad: 16 años, 10 meses
Puntos: 4
Respuesta: Crear funcion para realizar sentencias sql

Hola seria mejor que usaras Pear DB ya esta hecho todo y es facil de hacer los querys aunque yo en un principio use lo siguiente:

Código PHP:
class dbl{
function 
muestraf($cuales_campos$query){
$this->explotado=explode(', '$cuales_campos); 
$this->array_campos=$this->explotado;
$this->cuantos_campos=count($this->array_campos);
$this->query='SELECT '.$cuales_campos.' '.$query;
$this->consulta=@mysql_query($this->query);
$this->cuantas_filas=@mysql_num_rows($this->consulta);
$this->array_retorno_filas=array();
for(
$i=0$i<$this->cuantas_filas$i++){
$this->array_retorno_campos=array();
$this->fetch=@mysql_fetch_assoc($this->consulta);
        foreach(
$this->fetch as $key => $value){
            
$this->array_retorno_campos[$key] = $value;
        }
array_push($this->array_retorno_filas$this->array_retorno_campos);
}
return 
$this->array_retorno_filas;
}
//fin funcion

Despues solo hago un include_once a cada pagina donde voy a hacer algun query de esta forma:
Código PHP:
$db=new dbl;
$usuarios=$db->muestraf('c_id, c_usuario' ' FROM cuentas WHERE c_id="'.$_SESSION['id'].'" AND c_activo=1;'); 
Y luego imprimes los datos cuantas veces quieras de esta forma con algun bucle

Código PHP:
<?php echo ($usuarios[0]["c_usuario"]); ?>
Tiene sus limitaciones pero me ayuda mucho. Saludos.
__________________
Web Hosting y Diseño Web
  #17 (permalink)  
Antiguo 11/04/2009, 22:50
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
Respuesta: Crear funcion para realizar sentencias sql

Tema trasladado desde PHP.
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 07:25.