Darse de alta en la web | Recuperar password   
Inicio / Archivos a prueba / Auto-Generación y Ejecución de sentencias SQL

Auto-Generación y Ejecución de sentencias SQL (68)

Categoría: Funciones | Autor: tryke | Fecha: 17 may 06 (00:27) | Descargas 1054 descargas

Votación

4 Votos a favor - Votos en contra 7

Estado

Pendiente de valoración

Descarga

Archivo htm
htm

Descargar
(Tamaño: 26,09 KB)

Actualizaciones (3)

  1. 28 may 06 (00:03)
  2. 17 may 06 (00:57)
  3. 17 may 06 (00:31)

Archivo en Pruebas En ocasiones algunos formularios pueden tener muchisimos campos y generar un script puede traer dolores de cabeza a la hora de generar sentencias SQL.

Este pequeño ejemplo consiste en un conjunto de funciones que permiten crear scripts relativamente sencillos y que son capaces de manipular una gran cantidad de campos.

El archivo esta perfectamente documentado.

Para aquellos que aun asi tengais dudas podeis leer:
http://php.blogcindario.com/ficheros/php/database.html

Espero que os sirva de ayuda.

Un saludo.

Por:
Jose María Rodríguez Valls.
<webmaster@elcurriculum.com>
Programación Avanzada


Votaciones y comentarios

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   


Alta del archivo: 17 may 06 (00:27)
Actualización 1 (17 may 06 (00:31))
Votación
Avatar de rubencm
#1 rubencm
20 may 06 (21:22)
Esta bien el script, pero si la conexion a la base de datos esta hecha, lo volvería a hacer? :S
Creo que tendrias que comprobar si se ha abierto una conexion ya
Actualización 2 (17 may 06 (00:57))
Votación
Avatar de Arias
#2 Arias
21 may 06 (20:52)
Veamos...

COMENTARIO: Cuando veas (uno|dos) es que no me apetece escribir y resumo asi, eso dignificaria que hay dos cosas, una llamada uno y otro llamada dos.

Haces cosas raras en Obt(POST|GET)(1|2):
1) if ($_(POST|GET)) <- Ke pretendes hacer con esto?
2) Usa explode en vez de split :S
3) $pro[$v] = ke? de donde sale $por? no la veo definida en ningun lado

No se si te enseñaron que cosas como conexion a las bases de datos y demas son cosas MUY costosas, tu abres una conexion en cada funcion!! y para que pones esto:

return @$result;
mysql_free_result($result);

La arroba es estupida ahi, ademas el metodo acaba con el return, lo de despues de los returns no se ejecuta :S.

while (list($llave, $valor) = each($contenido))
Votación
Avatar de Arias
#3 Arias
21 may 06 (20:54)
while (list($llave, $valor) = each($contenido)) <- te presento a mi amigo, el bucle foreach.

No me apetece seguir mirando, no esta muy bien programado y sumamente ineficiente :S
Votación
Avatar de Arias
#4 Arias
21 may 06 (20:54)
Uy, el voto...
Votación
Avatar de tryke
#5 tryke
21 may 06 (23:43)
Si bueno, lo interesante es el concepto. La programación es mejorable.
Se podría comprobar si la conexión a sido abierta.

Y contestando los comentarios de Airis:

con:

if ($_POST) {
}

Compruebo que exista algún valor enviado por POST.

Con lo de foreach, los dos bucles son igual de buenos.

Y respecto a $pro, ¿desde cuando es necesario declarar previamente las variables?

Un salido.

Un apunte. En lo del return tienes toda la razón, se me fue la pinza.
Votación
Avatar de Arias
#6 Arias
22 may 06 (23:36)
ponte un error_reporting(E_ALL); y veras como no es tan majo lo de no hacer $pro = array(); primero, es necesario declarar los arrays para poder meter elementos ... Y la manera correcta de comprobar si hay algo en un array es con la funcion empty(), no como lo haces.
Votación
Avatar de MijT
#7 MijT
23 may 06 (21:11)
No soy el rey de la ortografia, pero creo que es Prohibido (en el inicio del archivo).

Con los comentarios estoy de acuerdo, esos if en get y post deberias especificar que quieres controlar, si tienen elementos, o que, utilizando funciones... mira count, is_array, empty, etc, etc.

Por otro lado, mas que un conjunto de funciones, personalmente, lo haria en un conjunto de clases... (de conexion, parametros, etc).

Saludos!
Votación
Avatar de tryke
#8 tryke
24 may 06 (11:25)
Ya he dicho que la programación era mejorable...

Pero para mi lo que cuenta es el concepto. El concepto es el concepto. Una pizza sin buena pasta no vale nada.

Soys más quisikillosas que las garrapatas... que si código por aki... que si ortografía por aya..

Me estuve planteando hacerlo con clases. pero la verdad...Al menos en mi caso... Todo lo que considero que forma parte del kernel de un website no me gusta hacerlo con clases. Son manias, lose...Para todo lo demás, mastercard.

Un saludo,.
Votación
Avatar de rubencm
#9 rubencm
25 may 06 (20:44)
considerate afotunado, no viste los fallos k le sacaron a mi script que era cortito xD, creo que se batieron records en lineas escritas en comentarios

yo creo k cuanto mas perfecto es mejor :P
Votación
Avatar de Arias
#10 Arias
26 may 06 (12:58)
Cuando esta mal la base no merece la pena ponerse a analizar los errores del codigo...
Votación
Avatar de rubencm
#11 rubencm
27 may 06 (13:44)
estaba perfecto, solo me modificasteis tonterias en plan comillas y cosas asi, xk el script funcoino desde el principio
Votación
Avatar de MijT
#12 MijT
27 may 06 (15:06)
Actualización 3 (28 may 06 (00:03))
Votación
Avatar de tryke
#3 tryke
28 may 06 (00:05)
Vale. Vale...
Aki pongo una versión más eficiente....

¿Mejor ahora?
Votación
Avatar de erfon
#4 erfon
28 may 06 (17:38)
Hola, veo que ahora compruebas si la conexión está o no abierta, y haces caso de la mayoría de cosas que te ha dicho Arias.. aunque ¿Por dónde está documentado?.

Un saludo
Votación
Avatar de tryke
#5 tryke
28 may 06 (23:06)
Esta version no esta documentada, pero se basa en los mismos nombres de funciones que hay en la versión anterior.

Si leeis el articulo: http://php.blogcindario.com/ficheros/php/database.html

Podeis intuir mas o menos que hace cada función.

Es muy simple. Pero no tengo tiempo de documentarlo.

Un saludo.
Votación
Avatar de MijT
#6 MijT
31 may 06 (06:32)
Usas Objetos y tienes esto, no te parece que deberias tener algo como esto otro?
Votación
Avatar de MijT
#7 MijT
31 may 06 (06:34)
Me equivoque en algo, seria mas bien como este codigo.

Edit: Nota que reemplaze el $_POST que me habia quedado en el primer codigo que corregi por $superGlobal.
Votación
Avatar de aston
#8 aston
05 jun 06 (09:15)
Yo trabajé mucho tiempo con cosas como ésta. Sirven para aprender. A veces conviene que la función te devuelva un string con sólo el SQL... de esa forma te independizas de la conexión y conseguis un código mas flexible

No se parece a éste concepto? Evitemos crear la rueda dos veces
http://phplens.com/lens/adodb/docs-adodb.htm#autoexecute
http://phplens.com/lens/adodb/docs-active-record.htm
Votación
Avatar de tryke
#9 tryke
07 jun 06 (15:55)
Hola Mijt,

Pues tienes toda la razón del mundo. Ni habia pensado en ello. Lo mejoraré en las proximas versiones.

Gracias por tu anotación
Votación
Avatar de tryke
#10 tryke
07 jun 06 (15:57)
Ho0ola aston,

Si, la verdad es que es muy similar. No lo conocia, pero me parece que hacen cosas similares.
Con un pequeño matiz. Esta clase también te genera el array con los datos. Para eso esta OBTPost que retorna el array para poder utilizarlo al hacer el insert.

Seguramente el que tu dices es más eficiente. No te lo discuto.

Un saludo.
Votación
Avatar de aAnuVizZ
#11 aAnuVizZ
16 jul 06 (00:54)
como la mayoria comenta, es mejor creo usar una clase para la conexion, haci se hace mas liviano tu codigo =), he chekeado tu codigo y ta bien , aunke le faltan algunas cosillas :=), pero vale!!!
Votación
Avatar de broken
#12 broken
19 ene 07 (01:34)
Esta bastante bien
Votación
Avatar de NoSetup.org
#13 NoSetup.org
23 ene 07 (20:35)
Votación
Avatar de thessoro
#14 thessoro
24 ene 07 (15:45)
«Podeis intuir mas o menos que hace cada función.» En un primer vistazo no, la verdad. Y los nombres de las variables podrian ser un poco más explicativos ($ret, $c, $k, $v...) y luego $tabla, $contenido, $datos... (¿por qué no $t, $d, $gjisqw? ya puestos)
De todos modos a mí la idea me gusta, y ha sido en mi opinion demasiado criticado. Está documentado lo que siempre es un punto a favor.
Por cierto estoy completamente deacuerdo con "Airis" en el uso de split: con un explode es suficiente, y si vas a usar split, al menos usa preg_split. split es la menos eficiente de las tres.

Votación
Avatar de panino
#15 panino
08 abr 07 (05:05)
Aparte de las cosas mencionadas, le falta seguridad en lo referente al soporte $_POST y $_GET (en la documentación se menciona cómo solucionarlo, pero debería estar incluído en la clase)
Votación
Avatar de ZydRick
#16 ZydRick
17 jun 07 (00:28)
¿Y los ejemplos?
Votación
Avatar de ZydRick
#17 ZydRick
23 jun 07 (03:27)
Votación
Avatar de Arias
#18 Arias
04 dic 07 (14:39)
A ver si se aprueba para que sigas mejorandolo....

cuando repites algo muchas veces, vease "if (!$this->abierto) $this->OpenMySQL()" lo mejor es hacer una funcion que contenga eso mismo en invocarla. Yo la llamaria "ensureOpen" o algo asi... Mirate la funcion mysql_real_escape_string, las magic quotes y algo de orientación a objetos, que el ese diseño de clases no es muy afortunado ... Por cierto mi tabla "Cliente" tiene como clave primaria "DNI", no "id_cliente", es una pena que la clase no funcione 8-) ...

if (condicion) { codigo, mas codigo } else { codigo, otro codigo } => codigo; if (condicion) { mas codigo } else { otro codigo}

foreach ($c as $k => $v) => si no vas a usar $k pues simplemente => foreach ($c as $v)

Otro dia sigo mirando....
Votación
Avatar de Arias
#19 Arias
04 dic 07 (14:40)
Y como nota para todos: leed algo de refactoring, os cambiará la manera de programar...
Votación
Avatar de Momy
#20 Momy
05 dic 07 (16:57)
La funcion de INSERT, debería ser mas flexible, tu antepones de que yo, tengo un campo con ID (AUTO INCREMENT), pero supongamos de que no... que solo utilizo para Relacionar...

Saludos.
Votación
Avatar de turl
#21 turl
04 abr 08 (19:16)
Muchas sugerencias y pocas actualizaciones en mucho tiempo...
Votación
Avatar de Irozga
#22 Irozga
16 may 08 (15:24)
Votación
Avatar de broken
#23 broken
16 ago 08 (04:44)
Desde el 2006!
El archivo mas viejo...
Esperemos que voten y se elimine...
Porque parece que ya no hay mas actualizaciones sobre este archivo y aunque yo habia votado a favor...cambio mi voto porque me parece que ya no va a ser actualizado mas el archivo.

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster