Array
(
)

Excecutar procedure

PHP
Sidney Abreu
   - 31 mai 2011

Gente eu tenho uma procedure em mysql de um insert mas quando eu executo no php um erro:
(mysql): CALL SpInsertCidade('asadsfsfas',1)   1318: Incorrect number of arguments for PROCEDURE SpInsertCidade; expected 3, got 2
A procedure é:
#Código

 
CREATE DEFINER = 'root'@'localhost' PROCEDURE `SpInsertCidade`(
        IN varId INTEGER(11),
        IN varDescricao VARCHAR(60),
        IN varUF INTEGER(11)
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
	IF (exists(select Cid_Id from cidades where (Cid_Id = varId))) THEN
    UPDATE
  		cidades
	SET
  		Cid_Descricao = VarDescricao,
  		UF_Id = varUF
    where (Cid_Id = varId);
    
    ELSE
      INSERT INTO
        cidades(
        Cid_Descricao,
        UF_Id)
      VALUES(
        varDescricao,
        varUF);
      
    END IF;
      
      
END;


a função em php é:
#Código
/* função para inserir cidades */
		function gravar(){
			$sql = "CALL SpInsertCidade('".$_REQUEST[CID_DESCRICAO]."',$_REQUEST[UF_ID])";
			$this->resultado = $this->con->banco->Execute($sql);
					
		}

Acredito que o erro seja de concatenação ja que se trata de dois parametros um Varchar e um Inteiro

Natal Lima
   - 14 jun 2011

Sidney, tenta essa linha na sua função em PHP:
#Código

 $sql = "CALL SpInsertCidade('".$_REQUEST[CID_DESCRICAO]."'".,$_REQUEST[UF_ID].")";

Natal de Lima
 

0
|
0

Rafmattos
   - 14 jun 2011


Citação:
Sidney, tenta essa linha na sua função em PHP:
#Código

 $sql = "CALL SpInsertCidade('".$_REQUEST[CID_DESCRICAO]."'".,$_REQUEST[UF_ID].")";

Natal de Lima
 


pow amigo sou de Campo Grande/MS tb.
bem dificil ver algum de CG aqui.
Seja bem vindo a o forum

--------------------------------------------------------------------------------
Blog: http://mundodoprogramador.wordpress.com/
MSN: rafmattos@hotmail.com
Twitter: _rafmattos

0
|
0

Natal Lima
   - 14 jun 2011

Vlw cara, vi que vc também gosta de Delphi. tava passando por lá pra tentar da umas ajudas pra galera. 

0
|
0

Sidney Abreu
   - 15 jun 2011

Galera dar o seguinte error:

(mysql): CALL SpInsertCidade('asadsfsfas',1)   1318: Incorrect number of arguments for PROCEDURE loja.SpInsertCidade; expected 3, got 2
ADOConnection._Execute(CALL SpInsertCidade('asadsfsfas',1), false) % line 1015, file: adodb.inc.php   ADOConnection.Execute(CALL SpInsertCidade('asadsfsfas',1)) % line 30, file: FrmCidadesCod.php FrmCidades.gravar() % line 32, file: FrmCidadesAcao.php require(C:\wamp\www\CantoDigital\admin\FrmCidadesAcao.php) % line 45, file: index.php

0
|
0

Natal Lima
   - 16 jun 2011

CREATE DEFINER = 'root'@'localhost' PROCEDURE `SpInsertCidade`(
        IN varId INTEGER(11),
        IN varDescricao VARCHAR(60),
        IN varUF INTEGER(11)
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
IF (exists(select Cid_Id from cidades where (Cid_Id = varId))) THEN
    UPDATE
  cidades
SET
  Cid_Descricao = VarDescricao,
  UF_Id = varUF
    where (Cid_Id = varId);
   
    ELSE
      INSERT INTO
        cidades(
        Cid_Descricao,
        UF_Id)
      VALUES(
        varDescricao,
        varUF);
     
    END IF;
     
     
END;

a função em php é:
#Código
/* função para inserir cidades */
function gravar(){
$sql = "CALL SpInsertCidade('".$_REQUEST[CID_DESCRICAO]."',$_REQUEST[UF_ID])";
$this->resultado = $this->con->banco->Execute($sql);

}Sidney, você criou uma procedure que passando três variáveis: (varID, varDescricao e varUF). Mas quando você executa a procedure no PHP você está passando apenas duas. É isso que ele está reclamando. Como o varID provavelmente é inserido automaticamente por trigger, tente alterar sua procedure retirando o varID na linha 2 ou ao executar a function do php, faça o seguinte ajuste:
#Código

$sql = "CALL SpInsertCidade('','".$_REQUEST[CID_DESCRICAO]."',$_REQUEST[UF_ID])";
Eu acrescentei duas aspas simples e uma vírgula antes da variável $_REQUEST[CID_DESCRICAO]. Testa aí e informa se deu certo.

0
|
0