When I'm executing the following statement in Magento with a really large $sku, the execution terminates without any errors thrown what so ever. There are no errors in either Magento's, Apache's or PHP's error logs.
Mage::getModel('catalog/product')-loadByAttribute('sku', $sku);
Question: How do I catch the error?
I've tried to set custom error handlers, and for testing purposes I've also managed to trigger error situations where each of the error handler functions are invoked. But when running the previously mentioned Magento code with a large $sku, none of the error handling functions are executed.
error_reporting( -1 );
set_error_handler( array( 'Error', 'captureNormal' ) );
set_exception_handler( array( 'Error', 'captureException' ) );
register_shutdown_function( array( 'Error', 'captureShutdown' ) );
For completeness, this is the $sku I'm passing to loadByAttribute(). (The sku is invalid, but that is not the issue)
1- 9685 0102046|1- 9685 1212100|1- 9685 1212092|1- 9685 1212096|1-
9685 1102100|1- 9685 1102108|1- 9685 1102112|1- 9685 1102092|1- 9685
0102048|1- 9685 0102054|1- 9685 0102056|1- 9685 0102058|1- 9685
1212104|1- 9685 1212108|1- 9685 0212058|1- 9685 0104050|1- 9685
0212050|1- 9685 0212056|1- 9685 0212044|1- 9685 0212048|1- 9685
0212052|1- 9685 0212054|1- 9685 1102104|1- 9685 1102124
Any insight into this matter is much appreciated!
Update:
Upon further investigation, this is the exact point in the code where execution terminates. when the foreach is executed I guess Magento goes into MySQL world and starts loading up data from the database.
\Mage\Catalog\Model\Abstract.php
public function loadByAttribute($attribute, $value, $additionalAttributes = '*')
{
$collection = $this->getResourceCollection()
->addAttributeToSelect($additionalAttributes)
->addAttributeToFilter($attribute, $value)
->setPage(1,1);
foreach ($collection as $object) { // <--------------- HERE
return $object;
}
return false;
}
Note, I'm ONLY interested in finding out how to properly CATCH these kinds of errors, not "fix" the logic. This is so that I can present a proper error message to the user. The example above with the malformed sku is contrived and I have no desire to make my Magento app work with those erroneous skus.