Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/12/2008, 08:03
ClaCS
 
Fecha de Ingreso: enero-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 2
Pregunta Respuesta: Dudas con MySQL, SP con multiples parametros y PHP

Holas gente!...Sorry por la demora de contestar …ya saben q los trabajos finales de ciclo de la universidad, algunos trabajos q me caen de vez en cuando y la enamorada …(sobre todo ella…ojala nunk lea esto…jajaja) quitan bastante tiempo Ademas no tengo inter en casa y tengo q estar juntando mi sencillo para ir al ciber…jejeje…bueno esa es otra historia…lo importante es q ya estoy aquí de nuevo 

Ya he podido llamar el SP desde PHP con la ayuda de mysqli.dll y sus respectivos metodos …después de varios intentos…jejeje…
Puedo llamar al SP desde PHP pero mandandole parámetros q no sean nulos…he ahí el problema xq lo q yo necesito es eso
Según la logica del SP q quiero aplicar se le mandarian, de acuerdo a lo q se desee hacer, ciertos parámetros, unos seran no nulos y otros si, por ejemplo para hacer un UPDATE tendria q mandarle al SP los sgtes parámetros

_TipoConsulta=1
_IdProveedor=24
_NombreCompania=xxx
_Direccion=dir_xxx
_Telefono=777
_NombreContacto=yyy
_CargoContacto=zzz

Llamando al SP desde PHP de la siguiente manera

Código:
…
$resultado = mysqli_query($cnn,"CALL SP_Proveedores(1,24,’xxx’,’dir_xxx’,777,’yyy’,’zzz’,null)");
…
Los parámetros q serian varchar en MySQL se pasan entre comillas simples desde PHP??...supongo q los enteros no…no??...null no se pasaria entre comillas simples??

Como se observa el valor de _listaInicio seria null ya q no me sirviria para esta ocasión

Pero si quiero listar los proveedores de 5 en 5 utilizaria el TipoConsulta=2 de esta manera

Código:
…
$resultado = mysqli_query($cnn,"CALL SP_Proveedores(2,null,null,null,null,null,null,$listaInicio)");
…
Ahora se le pasaran como null los otros parámetros diferentes a _listaInicio (esta variable me sirve en el codigo para q me muestre los datos de 5 en 5 dependiendo de _listaInicio…si _listaInicio seria 0 me mostraria los 5 primeros registros, si fuera 5 me mostraria los segundos 5 registros y asi sucesivamente… Esto lo hago con el fin de poder hacer las paginaciones de la tabla )

Esa es la otra duda q tenia…ya q al hacer esto se genera un error en PHP debido a q el SP no retorna nada debido a los nulls…No se si estoy pasando mal las variables null o si desde PHP los null no se pasan de esa forma :S

Por eso les puse el codigo en .NET solo para ejemplos de ilustración

Código:
CREATE proc [dbo].[_Proveedores]
@Tipoconsulta tinyint=null,
@IdProveedor int=null,
@NombreCompañía nvarchar(40)=null,
@Dirección nvarchar(60)=null,
@Teléfono nvarchar(24)=null,
@NombreContacto nvarchar(30)=null,
@CargoContacto  nvarchar(30)=null
as
…
Como se ve las variables del SP se declaran como null desde el mismo SP

Y desde el codigo de la aplicación

Código:
…
SqlCommand consultasql = new SqlCommand("_Proveedores", cnn);
consultasql.CommandType = System.Data.CommandType.StoredProcedure;
consultasql.Parameters.Add("@Tipoconsulta", System.Data.SqlDbType.TinyInt).Value = 2;
…
Solo se agragarian los parametros q necesito sin necesidad de estar poniendo a los otros como null

Con respecto a si el SP esta bien implementado…tuve q corregir la parte del SP q hice cuando TipoConsulta=2 y donde utilizo la variable _listaInicio

Código:
/*LISTAR PROVEEDORES*/
ELSEIF _TipoConsulta=2 THEN
SELECT IdProveedor,NombreCompañía,Dirección,Teléfono,NombreContacto,CargoContacto
FROM proveedores LIMIT _listaInicio,5;
Ya q se producia un error al pasarle un valor parametrizado al LIMIT. Al parecer esto es un bug del MySQL 5 … creo…

La cuestion es q cuando postee el SP si me corria y no presentaba ningun error…cosas raras q a veces pasan… :S…bueno… buscando…buscando…encontre la solucion y cambie esa parte del codigo del SP por esta

Código:
/*LISTAR PROVEEDORES*/
ELSEIF _TipoConsulta=2 THEN
SET @li=_listaInicio;
PREPARE stmt FROM "SELECT * FROM proveedores LIMIT ?,5";
EXECUTE stmt USING @li;
DEALLOCATE PREPARE stmt;
Bueno este dato puede servirles a muchos q tal vez en alguna oportunidad quieran utilizar el LIMIT con valores parametrizados  …
Hasta ahí todo bien…ahora el SP corre a la perfeccion…pero aun sigo teniendo las dudas de los parámetros nulos…

Gracias por todo