PDOStatement::errorInfo() returns an array, but you are directly echoing it, which will always result in the string Array. You must store its returned array, and access the components you wish to read:
$err = $select->errorInfo();
print_r($err);
// Example as lifted from PHP docs linked above:
PDO::errorInfo():
Array
(
[0] => HY000
[1] => 1
[2] => near "bogus": syntax error
)
Incidentally, the E_NOTICE for array to string conversion is new in PHP 5.4. The same code in PHP 5.3 would output Array as a string but would not issue the E_NOTICE.
Since you are using PHP 5.4, you can dereference the message [2] directly if you wish:
// 5.4+ only...
echo $select->errorInfo()[2];
Now why you are getting an error:
As to why you are entering the else block to report the error in the first place, you have a place holder for :id, but you never bound the variable $id before executing the query.
You may use
$select->execute(array(':id', $id))
Or
$select->bindParam(':id', $id, PDO::PARAM_INT); // assuming an integer $id. Use PDO::PARAM_STR for strings