2016-09-13 2 views
0

У меня этот код. Все работает (и правильно), если у меня нет вызова хранимой процедуры. Но вызов хранимой процедуры по какой-то причине блокирует следующий оператор. Как это исправить?Сохраненная процедура PHP - не может сделать другое заявление после этого

// 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(); 
+0

Итак ... вы закроете заявление? '$ stmt-> close()'? 'PDOStatemement :: close()' не существует. Вы можете закрыть курсор, который является «PDOStatement :: closeCursor()». –

+0

Обычно нет, это была просто попытка - не имеет никакого значения :-) –

+0

@ Zeratops Это не PDO, это MySQLi. 'bind_param();' является функцией MySQLi, и вы можете сказать по синтаксису ;-) Так что '$ stmt-> close()' существует для этого API. – Qirel

ответ

-1

попробовать этот $ STMT = $ db-> запрос ("CALL GetNewOrderNo;"); добавление ";"

+0

'PDO :: Query' обрабатывает запрос и необязательно должен добавлять этот символ. –

+0

Просто попробовал - не имеет значения. –

0

MySQL хранимые процедуры могут возвращать несколько результирующих наборов, что является причиной устранения всех результатов перед выполнением другого запроса с использованием того же соединения.

Использование nextRowset() после вызова процедуры:

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

Спасибо за попытку, но это тоже не сработало. Я только что добавил дополнительное DB-соединение для хранимой процедуры. –

Смежные вопросы