php - MySQL 存储过程无法从 ajax/php 运行

标签 php jquery mysql ajax stored-procedures

我在 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'].")");

编辑: PhP 中的“go()”函数如下所示:

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

最后,在以下代码中从 jQuery 调用 PhP 脚本:

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

现在,当使用 $.get() 方法并因此过滤 INPUT_GET 值时,一切正常。但是当调用完全相同的代码,但在 jQuery 中使用 $.post() 方法并因此使用从 INPUT_POST 过滤的值时,我得到错误:

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

当然,整个代码并没有被执行。因此问题是:为什么这段代码适用于 GET 但不适用于 POST?如果可能的话,我更愿意使用 POST 来避免公开传递给后端应用程序的值(如果我弄错了请告诉我)。提前感谢您的回复。

最佳答案

它与存储过程无关,因为如果您正确地捕获发送的数据并将其正确地传递给过程,它就不可能不起作用 - 此外您已经确认它可以使用 GET 方法。

正如 Jay Blanchard 所说,您必须检查数据集是如何传递的,以及它是否完全传递了。

关于php - MySQL 存储过程无法从 ajax/php 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34139577/

相关文章:

javascript - JQuery 根据内容调整 div 大小

javascript - 输入后立即获取变量

javascript - 如何在javascript中制作Json数组

php - 使用单个 PHP 数组与多个 MySQL 调用

Mysql,数据库编码为UTF-8

php - 如何在FLASH中加载PHP动态生成的XML

javascript - HTML 表单文本转语音说出文件名和 PHP、 double 表单

php - 显示 PHP 异常消息会带来安全风险吗?

php - 发送的消息被 chop 为接收到的数据的大小

php - 从表中选择条件 1 或反转条件 1 的有效方法