- 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;
1. Como llamo a un MySQL stored procedure (SP) con varios parámetros desde PHP??
He creado el siguiente SP
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





