Мне кажется, что ваш процесс даже не выполняется из-за неправильной передачи параметра;Вы можете справиться с этим только в своем php-коде, поймав исключение.
Если на самом деле вызывается процедура, но просто происходит сбой внутри процедуры из-за какого-то несоответствия типов данных, вы можете использовать
BEGIN TRY
-- your proc statements here
END TRY
BEGIN CATCH
END CATCH
Документация здесь.
ОБНОВЛЕНИЕ
Поскольку вы сказали, что вызываете proc один раз для каждой записи, которую вам нужно обработать, вам нужно отловить ошибку на стороне PHP.Вы можете использовать try/catch
блоки на PHP. Смотрите здесь .
По сути, вам нужно иметь блок try/catch
внутри цикла foreach
, охватывающий только ту часть, которая вызывает хранимую процедуру; однако , перед вызовом хранимой процедуры я бы просто написал оператор if
, который гарантирует, что все параметры, которые будут переданы в процесс, имеют ожидаемый тип и длину.Например, если хранимая процедура требует параметр @a
типа int
, я бы вообще запретил вызывать proc, если передаваемый параметр не является числом или пустой строкой.
ОБНОВЛЕНИЕ 2
Основано на примере php (Внимание: я не программист PHP), похоже, это будет работать:
try{
$result = execute($stmt, $params);
}
catch (Exception $e) {
}
Но опять же, если вы знаете типы данных, ожидаемые процедурой, почему бы не иметь if
вместо try/catch
?