【问题标题】:Out of memory while calling stored procedure调用存储过程时内存不足
【发布时间】:2016-05-01 15:15:23
【问题描述】:

我无法从将数据写入数据库的存储过程中检索数据。连接已正确建立,因为其他过程,即只返回数据而不写入的过程(如“调用 rec.getProducts()”)运行良好。每当我执行以下代码时,都会出现错误:

内存不足(分配262144)(试图分配-3字节)

过程声明如下所示:

OUT MSG VARCHAR(300),       
OUT STATE CHAR(5),
OUT @IDORDER  dec(10, 0),
IN @NAME char(20),
IN @IDPAYER dec(6, 0),                   
IN @PRODUCT char(10),

我的php代码:

$conn = new PDO(...);

$sql = "{call rec.saveProduct(?,?,?,?,?,?)}";
$rs = $conn->prepare($sql);
$rs->bindParam(1, $msg, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,300);
$rs->bindParam(2, $state, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,5);
$rs->bindParam(3, $idOrder, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,10);
$rs->bindParam(4, $name, PDO::PARAM_STR);
$rs->bindParam(5, $idPayer, PDO::PARAM_INT);
$rs->bindParam(6, $product, PDO::PARAM_STR);
$rs->execute();

任何帮助将不胜感激。

【问题讨论】:

    标签: php pdo odbc


    【解决方案1】:

    当我编写存储过程时,我更喜欢只传递输入参数:

    IN @NAME char(20),
    IN @IDPAYER dec(6, 0),                   
    IN @PRODUCT char(10),
    

    然后在里面我将输出作为结果集返回:

    SELECT @MSG AS [MSG], @STATE AS [STATE], @IDORDER AS [IDORDER]
    

    然后在 PHP 中:

    $sql = "{call rec.saveProduct(?,?,?)}";
    $rs = $conn->prepare($sql);
    $rs->bindParam(1, $name, PDO::PARAM_STR);
    $rs->bindParam(2, $idPayer, PDO::PARAM_INT);
    $rs->bindParam(3, $product, PDO::PARAM_STR);
    $rs->execute();
    $row = $rs->fetch();
    
    $msg = $row['MSG'];
    $state = $row['STATE'];
    $idOrder = $row['IDORDER'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      相关资源
      最近更新 更多