存储过程PHP - 之后不能再发表声明

时间:2016-09-13 09:38:15

标签: php mysql stored-procedures mysqli pdo

我有这个代码。如果我没有存储过程调用,一切正常(并且是正确的)。但由于某种原因,存储过程调用会阻止下一个语句。我该如何解决?

// GET ID
$stmt = $db->query("CALL GetNewOrderNo");
while($row = $stmt->fetch_assoc()) {
    $orderid = $row["OrderId"];
}
$stmt->close();

// Add ID
$upd = $db->prepare("UPDATE orders SET orderid=? WHERE customer=? AND  info_date=? AND orderid='' LIMIT 1");
$upd->bind_param("ssi", $orderid, $customer, $datetime);
$upd->execute();

2 个答案:

答案 0 :(得分:0)

MySQL存储过程可以返回多个结果集,这是在使用相同连接执行另一个查询之前清除所有结果的原因。

在程序调用后使用nextRowset()

$stmt = $db->query("CALL GetNewOrderNo");
while($row = $stmt->fetch_assoc()) {
    $orderid = $row["OrderId"];
}
$stmt->nextRowset();
$stmt->close();

答案 1 :(得分:-1)

试试这个 $ stmt = $ db-> query(" CALL GetNewOrderNo;"); 添加";"