Foros del Web » Programando para Internet » PHP »

Ejecutar Procedimientos Alamecenados con PHP

Estas en el tema de Ejecutar Procedimientos Alamecenados con PHP en el foro de PHP en Foros del Web. Como ejecuto desde PHP un procedimiento almacena desde PHP.?...
  #1 (permalink)  
Antiguo 05/05/2005, 14:21
 
Fecha de Ingreso: agosto-2004
Mensajes: 52
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Ejecutar Procedimientos Alamecenados con PHP

Como ejecuto desde PHP un procedimiento almacena desde PHP.?
  #2 (permalink)  
Antiguo 05/05/2005, 15:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sé que a veces la "constumbre" de hablar de algunos temas habitualmente hace que no cuando hablas de lo mismo a otras personas que no hacen lo que tu habitualmente se "omiten" muchos detalles.

¿a que te refieres a un "procedimiento almacena desde PHP"'? ..

Hipotesis:
¿será que estás trabajando con Base de datos, tal vez MS SQL Server?

Intenta concretar las preguntas para que no tengamos que "adivinar" .. Tienes muchos caracteres para escribir en el mensaje .........

Un saludo,
  #3 (permalink)  
Antiguo 06/05/2005, 09:47
 
Fecha de Ingreso: agosto-2004
Mensajes: 52
Antigüedad: 13 años, 4 meses
Puntos: 0
Ok...como Ejecuto Un Procedimiento Almacenado En La Base De Datos, Desde Php.?
Por Ejemplo, Como Ejecuto Una Secuencia Que Esta Almacenada En Una Base De Datos, Pero Yo Para Conexion Puedo Utilizar Pear, Adodb, Mdvmetada, Etc...yo Nesito Saber Como Ejecuto Una Procedimiento Almacenado En Una Base De Datos "cualquiera" (oracle, Postgress, Mssql, Mysql Y El Resto), Como Hago Para Que Sea Indiferente De La Base De Datos.?
  #4 (permalink)  
Antiguo 06/05/2005, 10:02
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
¿Lo qué buscás es ejecutar un string como código PHP?
Si es eso, http://ar2.php.net/manual/es/function.eval.php
  #5 (permalink)  
Antiguo 06/05/2005, 10:05
 
Fecha de Ingreso: agosto-2004
Mensajes: 52
Antigüedad: 13 años, 4 meses
Puntos: 0
Si pero para un procedimiento almacenado en una Base de Datos:?
  #6 (permalink)  
Antiguo 06/05/2005, 10:07
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
ejemplo con mysql... En la DB tengo los comando de PHP q quiero ejecutar

Código PHP:
$query_ejecutar mysql_query("SELECT ejecutar FROM tabla") or die(mysql_error());
$ejecutar mysql_fetch_assoc($query_ejecutar);
eval(
$ejecutar['ejecutar']); 
  #7 (permalink)  
Antiguo 06/05/2005, 10:18
 
Fecha de Ingreso: agosto-2004
Mensajes: 52
Antigüedad: 13 años, 4 meses
Puntos: 0
Si amigo eso lo se perofectamente, pero en algunas bases de datos potentes como Oracle y Postgress, se pueden crear unos procedmientos o secuencias, pero no lo que yo no necesito saber es como realizar esos procedimiento desde php sin impotar la base de datos por ejemplo:
en Oracle con PHP-PEAR es:
function seq_id($c2)
{
$sql="SELECT SECUENCIA.NEXTVAL AS SEQ FROM DUAL";
$rst=$c2->query($sql);//$c2 es la conexion a la base de datos
if(!DB::isError($rst))
{
if($row = $rst->fetchRow(DB_FETCHMODE_ASSOC))
{
$seq=$row["SEQ"];
}
}
else{
echo "<SCRIPT>alert('Error en la Secuencia');</SCRIPT>";
die();
}
return $seq;
}
Esta funcion me retorna un valor consecutivo de la base de datos de Oracle, pero si ejecuto esto $sql="SELECT SECUENCIA.NEXTVAL AS SEQ FROM DUAL"; en una base de datos como Postgress o Mysql, no me funcionara por el FROM DUAL y por el .NEXTVAL, que son propiamente de Oracle, mi pregunta es: Como hago la cunsulta a la base de datos que cuando llame a esta secuencia no importe el motor de base de datos, espero que me entiendan.!
Gracias.!
  #8 (permalink)  
Antiguo 06/05/2005, 10:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En PHP .. "nativamente" este dispone de sus própias funciones para acceder a cada tipo de BD que soporta ..

Me refiero a las funciones (derivadas de la instalación de la extensión correspondiente):

Mysql
www.php.net/mysql

PostgreSQL
www.php.net/pg

Oracle
www.php.net/oracle

Etc ...

OK? .. Ahora .. tu necesitas y usas (cuando hablas de PEAR, ADOdb ...) "capas de abstracción de BD" .. Estas "implementaciones" tienen -sus- própios métodos para ejecutar "consultas SQL" .. lo mismo que las funciones nativas de PHP tienen sus tipicos: mysql_query() .. pg_query() .. etc ...

OK? ... Pero .. un "procedimiento almacenado" (store procedure) .. es una "sentencia SQL" -própia- de cada RDBMS que uses .. Así que su "sintax" SQL de uso .. o incluso si esta lo soporta .. dependerá de su SQL particular.

Por ejemplo .. .Mysql versiones inferiores a la versión 5.x NO soportan de ninguna forma "store procedures" .. Y para la versión 5.x en adelante .. su tratamiento puede no ser igual a lo que tal vez usas para SQL de Oracle. (la versión Mysql 5.x todavía está en fase de desarrollo: Beta a día de hoy)

Así que PHP .. ya cumple su "parte" de su trabajo con darte la función (o si usas una capa de abstración: el método de esa) para "mandar a ejecutar comando SQL" y tomar el resultado que este devuelva. Pero el "comando SQL" que le envies .. dependerá del RDMS que uses.

Tal vez alguna campa de abastracción tipo AdoDB implemente algún método "transparente" para ejecutar Procedimientos almacenados y que internamente haga la conversión de sintax SQL otratamiento de esta para que a cada RDMS que maneje le envie la sentencia SQL que corresponda. (esto por ejemplo parece que lo hace AdoDB par entregar datos "paginados" .. pues por ejemplo Mysql lo maneja como "LIMIT" .. PostgreSQL lo hace con el mismo comando SQL pero invertido el orden de los parámetros .. MS SQL Server usa "TOP" .. y el resto no sé como lo hará. El caso es que dispones de un método tipo "$adodb->dame_datos_paginado($sql,"tantos por página")" y el hace la conversión de sintax SQL.

Un saludo,

PD: si algo de esto "ya lo sabias" .. disculpa .. pero hasta que no se -concreta- lo que uno sabe y la situación hemos de suponer todo.
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 14:04.