2015-12-07 351 views
1

我在MySQL以下存儲過程:MySQL的存儲過程

CREATE DEFINER=`root`@`localhost` PROCEDURE `bancos_remove`(IN `id` 
INT, IN `cb` INT) 
BEGIN  
    DECLARE nomban VARCHAR(50);  
    DECLARE cuanban INT DEFAULT 0; 
    DECLARE codigo CHAR(5) DEFAULT '00000'; 
    DECLARE mensaje VARCHAR(256); 
    DECLARE respuesta VARCHAR(512) DEFAULT '00000'; 
    DECLARE texto VARCHAR(512); 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
     BEGIN 
     GET DIAGNOSTICS CONDITION 1 
      codigo = RETURNED_SQLSTATE, 
      mensaje = MESSAGE_TEXT; 
     SET respuesta = CONCAT(codigo,' - ',mensaje); 
     END;  
    SELECT nombre INTO nomban FROM bancos WHERE idbancos = cb; 
    SELECT COUNT(*) INTO cuanban FROM bancos_cuentas WHERE idbancos 
= cb;  
    IF cuanban > 0 THEN 
     SIGNAL SQLSTATE '90000' SET MESSAGE_TEXT = 'Banco tiene Cuentas Asociadas';  
    ELSE 
     DELETE FROM bancos WHERE idbancos = cb; 
     IF codigo = '00000' THEN 
     SET texto = CONCAT(cb,' - ',nomban); 
     CALL log_int_add(id, 'Mantenimiento de Bancos', 'B', NULL, texto); 
     ELSE 
     IF (mensaje IS NOT NULL) THEN 
      SET texto = CONCAT('Intentó Borrar:',cb,' - ',nomban,' Error:',codigo,'-',mensaje); 
      CALL log_int_add(id, 'Mantenimiento de Bancos', 'B', texto, NULL); 
     END IF; 
     END IF;  
END IF;  
SELECT respuesta; 
END 

我調用從PHP說的過程如下:

$getparams = filter_input_array(INPUT_GET); 
$output = go($connect, "CALL bancos_remove(".$_SESSION['idusuarios'].",".$getparams['c'].")"); 

Edit:實施「走出去() 「在PhP中的功能看起來像這樣:

function go($connection, $statement){ 
    $result = mysqli_query($connection, $statement); 
    $row = mysqli_fetch_assoc($result); 
    $output = $row['respuesta']; 
    return $output; 
} 

最後,PhP腳本從jQuery調用下面的代碼:

$.get("../app/probancos.php",{a:3,c:$("#txtIdBanco").val()},function(data){ ... some code ...}); 

現在,使用$獲得()方法時,因此過濾INPUT_GET值,一切正常花花公子。但是調用時非常相同的代碼,但使用jQuery中的$。員額()方法,因此使用從INPUT_POST過濾值,我得到的錯誤:

Commands out of sync; you can't run this command now

和當然,不執行整個代碼。因此,問題將是:爲什麼此代碼與GET協同工作而不是POST協議?如果可能的話,我寧願使用POST來避免將值傳遞給後端應用程序(請告訴我,如果我錯了)。預先感謝您的回覆。

+0

您是否確認使用AJAX的POST發送數據?你確認'$ getparams'是否正確填充? –

+0

是的,我通過在Php中打印「形成」語句來確認它,並且數據正確傳遞。 –

+0

「形成」聲明? –

回答

0

它與存儲過程沒有任何關係,因爲如果您正確捕獲發送的數據並將其正確傳遞給該過程,則無法使其無法工作 - 此外,您已確認它可以與GET方法一起使用。

正如Jay Blanchard所說,你必須檢查數據集是如何傳遞的,以及它是否通過。

+0

是的,我確認數據正確傳遞。我還在編輯函數go()中執行了對db過程的調用。 –