Título: Dudas con MySQL, SP con multiples parametros y PHP Publicado por: Anteros en 5 Diciembre 2008, 15:24 pm Hola que tal …hace unos días me estoy iniciando en el mundo de PHP y MySQL (ya que ya tengo tiempo desarrollando en .NET) y tengo las siguientes dudas…
1. Como llamo a un MySQL stored procedure (SP) con varios parámetros desde PHP?? He creado el siguiente SP CREATE DEFINER = 'root'@'localhost' PROCEDURE `_Proveedores`(IN _TipoConsulta TINYINT, IN _IdProveedor INTEGER, IN _NombreCompania VARCHAR(40), IN _Direccion VARCHAR(60), IN _Telefono VARCHAR(24), IN _NombreContacto VARCHAR(30), IN _CargoContacto VARCHAR(30),IN _listaInicio INTEGER) BEGIN /*UPDATE*/ IF _TipoConsulta=1 THEN UPDATE proveedores SET NombreCompañía = _NombreCompania, Dirección = _Direccion, Teléfono=_Telefono, NombreContacto = _NombreContacto, CargoContacto = _CargoContacto WHERE IdProveedor=_IdProveedor; /*LISTAR PROVEEDORES*/ ELSEIF _TipoConsulta=2 THEN SELECT IdProveedor,NombreCompañía,Dirección,Teléfono,NombreContacto,CargoContacto FROM proveedores LIMIT _listaInicio,5; /*INSERT*/ ELSEIF _TipoConsulta=3 THEN INSERT INTO proveedores (NombreCompañía ,Dirección ,Teléfono ,NombreContacto ,CargoContacto) VALUES (_NombreCompania ,_Direccion ,_Telefono ,_NombreContacto ,_CargoContacto); /*DELETE*/ ELSEIF _TipoConsulta=4 THEN DELETE FROM proveedores WHERE IdProveedor=_IdProveedor; END IF; END; El SP no me genera ningún error al compilarlo …a simple vista si se entiende lo que deseo hacer no?? Bueno la cuestion es q este SP de acuerdo a los parámetros q se le pasen hara determinada cosa En mi codigo PHP he intendado llamarlo dentro de una funcion asi: … … $consulta="CALL _Proveedores(2,null,null,null,null,null,null,$listaInicio)"; $resultado=mysql_query($consulta,$cnn); while ($registro=mysql_fetch_array($resultado)) { $coleccion[]=$registro; } mysql_close($cnn); return $coleccion;//esto seria lo q devuelve mi funcion Y he obtenido el error: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in… Supongo que, o bien el SP esta siendo mal llamado…(tal vez no es con mysql_query) o estoy pasando mal los parámetros por lo q el SP no retorna ningun registro… 2. Esta bien como asigno los parámetros al SP desde PHP?? Al llamar al SP este deberia devolverme un primer grupo de 5 Proveedores desde $listaInicio (x ejem si $listaInicio fuera 0 me devolveria los primeros 5 Proveedores ) y estos ser guardados en $coleccion 3. Necesariamente tengo que especificar los otros parámetros como null?? Estos parámetros innecesarios (en esta funcion) deben ser pasados como null desde el codigo PHP?? O desde el mismo SP?? … (Como se haria esto ultimo??) Por ejem en . NET yo hago lo siguiente (Disculpas por poner este codigo .NET pero es solo con motivos a un mayor entendimiento a mi consulta …si se desea tal vez dsps se puede borrar jejeje ) 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 --UPDATE if @Tipoconsulta=1 Begin UPDATE Proveedores SET [NombreCompañía] = @NombreCompañía, [Dirección] = @Dirección, [Teléfono]=@Teléfono, [NombreContacto] = @NombreContacto, [CargoContacto] = @CargoContacto WHERE IdProveedor=@IdProveedor End --LISTAR PROVEEDORES else if @Tipoconsulta=2 begin SELECT IdProveedor,NombreCompañía,Dirección,Teléfono,NombreContacto,CargoContacto FROM Proveedores End …etc …etc En este caso los parámetros del SP se pasan como null desde el mismo SP, esto me hace q al llamar el SP desde (x ejem) ASP.NET ya no declare como null todos los demas parámetros que no necesito para determinada funcion , es decir para listar todos los Proveedores solo tendria q pasarle el @Tipoconsulta=2 y el olvidarme del resto de param En MySQL los parametros de los SP no llevan @ no?? Por lo dicho anteriormente mi funcion lo llamaria al SP de la sigte manera (desde ASP.NET con C#): … … SqlCommand consultasql = new SqlCommand("_Proveedores", cnn); consultasql.CommandType = System.Data.CommandType.StoredProcedure; consultasql.Parameters.Add("@Tipoconsulta", System.Data.SqlDbType.TinyInt).Value = 2; … … Con esto ya no se tendria q poner null a todos los demas parametros q no son utilizados Creo q con todo esto se entendio lo q desearia poder hacer pero con MySQL y PHP…es esto posible???...un poco de orientación (o regaño por pensar en hacer cosas q no se pueden hacer jejeje) no me vendria nada mal …gracias por todo de antemano Salu2 |