Foros del Web » Programando para Internet » PHP »

Stored procedure desde php

Estas en el tema de Stored procedure desde php en el foro de PHP en Foros del Web. A ver les explico lo que quiero hacer. Tengo una base de datos en SQL SERVER y me conecto con PHP por odbc, hasta ahi ...
  #1 (permalink)  
Antiguo 08/06/2010, 12:04
 
Fecha de Ingreso: agosto-2009
Mensajes: 96
Antigüedad: 14 años, 8 meses
Puntos: 1
Stored procedure desde php

A ver les explico lo que quiero hacer.

Tengo una base de datos en SQL SERVER y me conecto con PHP por odbc, hasta ahi todo claro. Quiero insertar registros desde php en la base de datos con SQL SERVER pero lleva un STORED PROCEDURE que se tiene que ejecutar para la creacion de registros en esa tabla.

Entonces mi cuestión, seria como hacer para que me ejecute ese STORED PROCEDURE para que me aga todas la condiciones ahi metidas pasandole los datos desde un formulario PHP y una insercion de datos desde PHP.
  #2 (permalink)  
Antiguo 08/06/2010, 13:49
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Stored procedure desde php

Mira... si ya tienes la conexion y has hecho consultas esto te resultara conocido:
Código PHP:
$proc mssql_init("sp_NombreSP"); //Stored Procedure
mssql_bind($proc,"@nombre","Juan",SQLVARCHAR); //parametro varchar
mssql_bind($proc,"@apellido","Gonzalez",SQLVARCHAR); //parametro varchar
$data mssql_fetch_row(mssql_execute($proc)); //ejecutar sp 
En este caso yo si tengo exito en la insercion devuelvo un 1, sino un -1 desde el sp.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 09/06/2010, 03:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 96
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Stored procedure desde php

Vale hasta ahi me funciona todo correcto lo unico es que como sabre si se me an cumplido todas las condiciones de el STORED PROCEDURE.

Como podria retornar algo para que me apareza algun mensaje diciendo todo correcto o a surjido un error en la comprobación de datos.

Gracias!!!
  #4 (permalink)  
Antiguo 09/06/2010, 08:15
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Stored procedure desde php

Solo te faltaria poner un return en caso que el stored funciono correctamente (o paso por donde debia pasar) y un return para cuando tenga algun error.

El return de exito dejalo como 1 y el return de error dejalo como -1 (si tienes varios puntos de error puedes ir incrementando ese -1 hacia negativo para que te sea mas facil hacer debug luego)

En este caso la variable $data te recogeria ese valor y solo tendrias que preguntar si es >0 para exito o <0 en caso contrario.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 09/06/2010, 12:02
 
Fecha de Ingreso: agosto-2009
Mensajes: 96
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Stored procedure desde php

Mira perdona pero esque estoy echo un lio porque esto es totalmente nuevo para mi mira voy a ponerte lo que tengo a ver si puedo verlo mas claro.

Esto de a continuación es el STORED PROCEDURE que tengo en la base de datos SQL SERVER.

Código:
CREATE PROCEDURE PAdd_Clientes


@msg varchar(100) output,
@Codigo int,
@Nombre varchar (100),
@Nombre_Comercial varchar (100),
@Direccion varchar (100),
@Poblacion varchar (100),
@Codigo_postal varchar (25),
@Provincia varchar (100),
@Pais varchar (100) ,
@Nif varchar (25) ,
@Telefono varchar (25),
@Fax varchar (25) ,
@Subcuenta varchar (25),
@Email varchar (100),
@Web varchar (100),
@FPago int,
@Dia_Fijo1 int,
@Dia_Fijo2 int,
@Dia_Fijo3 int,
@Tarifa int,
@Dto_Especial numeric(18,2),
@Dto_PP numeric(18,2),
@Dto_Articulos numeric(18,2),
@Riesgo_Maximo numeric(18,2),
@Copias_Fac int,
@Fecha_Ini_vac datetime,
@Fecha_Fin_vac datetime,
@Cod_Grupo_Clientes int,
@CodTransportista int,
@Comercial int,
@Comision numeric(18,2),
@Notas text,
@Bloqueado bit,
@Excento_IVA bit,
@Recargo bit,
@Subcuenta_Retencion varchar (25),
@Cuenta_Remesas int,
@Alerta varchar(500),
@Aviso_Albaranes_Pendientes bit,
@Tipo_IVA int,
@Serie varchar(10),
@Notas_Presupuestos varchar (100),
@Notas_Pedidos varchar (100),
@Notas_Albaranes varchar (100),
@Notas_Facturas varchar (100),
@Notas_Abonos varchar (100),
@Periodicidad int,
@Dto_Mano_obra numeric(18,2),
@Usuario varchar(10)=null,
@Llamada char(3) 	/** Llamada desde VB o otro sp: @llamada="VB" --> VB / @llamada='SQL' --> TSQL**/,
@Dias_Ampliacion int= null,
@Cod_Provincia int=null,
@Cod_Pais int=null,
@Clave_NIF_Pais_Residencia int=null

Código PHP:
$conecta mssql_connect ("192.168.1.34""sa""");
mssql_select_db("base_de_datos");
$db"base_de_datos";
$spmssql_init("PAdd_CLientes");
/*Aqui es donde pongo las variables para poder probarlo*/
mssql_bind($sp"@msg"$nombreSQLCHARfalsefalse30);
mssql_bind($sp"@Codigo"$CodigoSQLCHAR); 
mssql_bind($sp"@Nombre"$NombreSQLVARCHAR); 
mssql_bind($sp"@Nombre_Comercial"$Nombre_ComercialSQLVARCHAR);
mssql_bind($sp"@Direccion"$DireccionSQLVARCHAR);
mssql_bind($sp"@Poblacion"$PoblacionSQLVARCHAR);
mssql_bind($sp"@Codigo_postal"$Codigo_postalSQLVARCHAR);
mssql_bind($sp"@Provincia"$ProvinciaSQLVARCHAR);
mssql_bind($sp"@Pais"$PaisSQLVARCHAR);
mssql_bind($sp"@Nif"$NifSQLVARCHAR);
mssql_bind($sp"@Telefono"$TelefonoSQLVARCHAR);
mssql_bind($sp"@Fax"$nombreSQLVARCHAR);
mssql_bind($sp"@Subcuenta"$nombreSQLVARCHAR);
mssql_bind($sp"@Email"$EmailSQLVARCHAR);
mssql_bind($sp"@Web"$nombreSQLVARCHAR);
mssql_bind($sp"@FPago"$nombreSQLINT1);
mssql_bind($sp"@Dia_Fijo1"$nombreSQLINT1);
mssql_bind($sp"@Dia_Fijo2"$nombreSQLINT1);
mssql_bind($sp"@Dia_Fijo3"$nombreSQLINT1);
mssql_bind($sp"@Tarifa"$nombreSQLINT1);
mssql_bind($sp"@Dto_Especial"$nombreSQLVARCHAR);
mssql_bind($sp"@Dto_PP"$nombreSQLVARCHAR);
mssql_bind($sp"@Dto_Articulos"$nombreSQLVARCHAR);
mssql_bind($sp"@Riesgo_Maximo"$nombreSQLVARCHAR);
mssql_bind($sp"@Copias_Fac"$nombreSQLVARCHAR);
mssql_bind($sp"@Fecha_Ini_vac"$nombreSQLFLT8);
mssql_bind($sp"@Fecha_Fin_vac"$nombreSQLFLT8);
mssql_bind($sp"@Cod_Grupo_Clientes"$nombreSQLVARCHAR);
mssql_bind($sp"@CodTransportista"$nombreSQLVARCHAR);
mssql_bind($sp"@Comercial"$nombreSQLVARCHAR);
mssql_bind($sp"@Comision"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas"$nombreSQLVARCHAR);
mssql_bind($sp"@Bloqueado"$nombreSQLVARCHAR);
mssql_bind($sp"@Excento_IVA"$nombreSQLVARCHAR);
mssql_bind($sp"@Recargo"$nombreSQLVARCHAR);
mssql_bind($sp"@Subcuenta_Retencion"$nombreSQLVARCHAR);
mssql_bind($sp"@Cuenta_Remesas"$nombreSQLVARCHAR);
mssql_bind($sp"@Alerta"$nombreSQLVARCHAR);
mssql_bind($sp"@Aviso_Albaranes_Pendientes"$nombreSQLVARCHAR);
mssql_bind($sp"@Tipo_IVA"$nombreSQLVARCHAR);
mssql_bind($sp"@Serie"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas_Presupuestos"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas_Pedidos"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas_Albaranes"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas_Facturas"$nombreSQLVARCHAR);
mssql_bind($sp"@Notas_Abonos"$nombreSQLVARCHAR);
mssql_bind($sp"@Periodicidad"$nombreSQLVARCHAR);
mssql_bind($sp"@Dto_Mano_obra"$nombreSQLVARCHAR);
mssql_bind($sp"@Usuario"$nombreSQLVARCHAR);
mssql_bind($sp"@Llamada"$nombreSQLVARCHAR);
mssql_bind($sp"@Dias_Ampliacion"$nombreSQLVARCHAR);
mssql_bind($sp"@Cod_Provincia"$nombreSQLVARCHAR);
mssql_bind($sp"@Cod_Pais"$nombreSQLVARCHAR);
mssql_bind($sp"@Clave_NIF_Pais_Residencia"$nombreSQLVARCHAR);
$data mssql_fetch_row(mssql_execute($sp));


$BD odbc_connect('base_de_datos''sa''');
$count "Select top 1 *  from Clientes order by Codigo desc";
$result=odbc_exec($BD,$count)or die(exit("Error en odbc_exec"));
print 
odbc_result_all($result,"border=1");

if (
$valor odbc_fetch_array($result)){   
do{
$ULTIMO=$valor['Codigo'];
$ULTIMO=$ULTIMO+1;
echo 
$ULTIMO;
} while (
$valor odbc_fetch_array($result));
} else echo (
"");
$sql "INSERT INTO Clientes(Codigo, Nombre , Nombre_Comercial, Telefono, Email, Direccion, NIF, Poblacion, Provincia, Pais)".
       
"VALUES ('$ULTIMO', '$Nombre', '$Nombre_Comercial', '$Telefono', '$Email', '$Direccion', '$Nif', '$Poblacion', '$Provincia', '$Pais')";
$result=odbc_exec($BD,$sql)or die(exit("Error en odbc_exec"));
        if(
$result){
echo (
"<p><img src='cliente_ok.png' width='64' height='64'>El Cliente se a modificado con éxito!!</p>");
}else{
echo (
"<img src='cliente_nok.png' width='64' height='64'>Error modificando datos: </p>");

Entonces no se si esto asi puede funcionar porque me inserta y puedo insertar cosas duplicadas cosa que en el procedimiento no me deja como por ejemplo en NIF.

Gracias!!
  #6 (permalink)  
Antiguo 09/06/2010, 12:18
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Stored procedure desde php

Entonces tienes dos opciones:
1.- hacer 2 procedimientos mas.
2.- modificar el que ya tienes.

Si haces 2 procedimientos mas, uno seria para ver si el nic existe y el otro para actualizar datos.
Si modificas el que ya tienes, tienes que hacer un select con el nic que te estan entregando y ver si existe, en ese caso haces un update y sino lo agregas.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #7 (permalink)  
Antiguo 31/08/2010, 18:52
 
Fecha de Ingreso: febrero-2009
Ubicación: cancun!
Mensajes: 898
Antigüedad: 15 años, 2 meses
Puntos: 15
Respuesta: Stored procedure desde php

hola!!! aprovecho este post para comentarles una duda que ya me tiene loca
tengo una base de datos sqlserver (mssql) y necesito ejecutar un procedimiento en base a unas fechas les mando los parametros me marca este error
"Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed"

asi es como envio los datos

Cita:
$ini='20090525';
$fin='20100831';
$myServer = "192.168.2.8";
$myUser = "sa";
$myPass = "sqlcyasa";
$myDB = "CyA30G";
$s = @mssql_connect($myServer, $myUser, $myPass) or die("Imposible ocnectar con ".$myServer);
$d = @mssql_select_db($myDB, $s) or die("Imposible encontrar la base ".$myDB);
//SP SIMPLE (EJECUCION)
$query = mssql_init("globalefra", $s);
mssql_bind($query, "@FechaIni", $ini, SQLVARCHAR, false);
mssql_bind($query, "@FechaFin", $fin, SQLVARCHAR, false);
$result = mssql_execute($query);
espero que me puedan echar una mano
las fechas estan en datetime en el sql
__________________
WHERE IS MY BLUE SUNNY SKY??
pd: todos los karmas son bienvenidos :D
  #8 (permalink)  
Antiguo 02/09/2010, 20:33
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Stored procedure desde php

Harvestmoon,

Te recomiendo hacer un mensaje nuevo de este mismo problema ya que no es el mismo.

De todas maneras te aconsejo ir al SQL Query y hacer la llamada al procedimiento tal cual la estas haciendo aca... lo que seria algo como esto:
exec globalefra 20090525, 20100831

Si te arroja un error me parece que es porque las fechas no las estas poniendo con hora, minutos y segundos (dado que señalas que las variables estan en datetime y las recibes en varchar y sin esto ultimo)

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!

Etiquetas: procedure, stored
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 18:17.