В Вашем вопросе, как я вижу, говорится о двух разных проблемах. Уточните, что именно Вам нужно
Можете перефразировать проблему с error_get_last? Не понятно.
$evalResult = @eval('$result = (bool)(1<2);');
$evalResult = null если выражение выполнилось с любым результатом
$evalResult = false если не выполнилось
CREATE TABLE person (
id SERIAL PRIMARY KEY,
name TEXT, -- извините за размерность
name_hash TEXT -- извините за размерность
);
CREATE INDEX idx_person_name_hash ON person(name_hash);
INSERT INTO person (name, name_hash) VALUES ('Petroff', 'P361' /* <?php echo soundex('Petroff'); ?> */ );
INSERT INTO person (name, name_hash) VALUES ('Sidoroff', 'S361' /* <?php echo soundex('Sidoroff'); ?> */ );
INSERT INTO person (name, name_hash) VALUES ('Ivanoff', 'I151' /* <?php echo soundex('Ivanoff'); ?> */ );
-- примеры реализаций soundex для русского я указал выше
SELECT name FROM person WHERE name_hash = 'P361'; -- все кто по звучанию напоминает Petroff