Могу предложить только идею
$sql = "
SELECT
username,
password
FROM
tbl_users
WHERE
id = :id
:limit
";
$queryBuilder->from($sql)->limit(1)->setValue('id', 1)->fetchRow();
$sql = "
SELECT
username,
password
FROM
tbl_users
WHERE
:where
:limit
";
$queryBuilder->from($sql)->limit(1)->setWhere(array(
'id' => 1
)->fetchRow();
Смысл идеи, запросы все также пишутся текстом, но есть всякие хелперы которые помогают нивелировать различия между базами данных и упростить работу.
Идею надо дорабатывать, но скажу, что на работе я использую что-то подобное для кастомных запросов, только в еще более упрощенном варианте
$q = "
SELECT
username,
password
FROM
tbl_users
WHERE
:where
LIMIT
";
$sql = strtr($q, array(
':where' => implode(' AND ', array(
'id = ' . dbQuote(1),
'deleted = 0'
))
));
$row = dbGetRow($sql);
Что бы такое трешак по системе не расползался, я внедрил Query object'ы, в которые эти запросы инкапсулированы. Получилось что то вроде такого
$query = QueryFactory::get('Accounts', 'GetTopModified');
$query->setPeriod('-7 day');
$row = $query->fetch();
При этом внутри объект, вручную склееный запрос. Удобно.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации