Если бы это был я, я бы настроил свой API на выдачу исключений, если строка была вставлена неправильно.
будет выглядеть примерно так (только для демонстрации):
$dbo = new Database();
foreach ($items as $item) {
try {
$dbo->insert($item);
Log::toLogfile('Row was successfully inserted');
} catch (Exception $e) {
// If an exception failed upon insert, I can log the message and move on
error_log($e->getMessage());
}
}
class Database
{
public function insert(array $item) {
// Here you can add any number of validators
if (empty($item)) {
throw new Exception(sprintf('Invalid $item array (%s)', serialize($item));
}
elseif (!array_key_exists('id', $item)) {
throw new Exception(sprintf('Invalid $item[id] (%s)', serialize(item));
}
// Making a call to php function which returns bool
// No problem, we test for return value and throw exception accordingly
if (!$this->dbo->insert($item)) {
throw new Exception(sprintf('Row was not inserted (%s)', serialize($item));
}
// If we made it this far, we have successfully inserted a row
// And code resumes back up after call to this function was made
}
Бросок исключений - лучший способ вернуть сообщение в вызывающий код, и он заставляет вызывающий код обрабатывать исключение. Обернув наш $dbo->insert($item)
вызов в блок try / catch, мы можем перехватить исключение, записать его и перейти к следующему элементу в массиве.