История изменений
Исправление Deleted, (текущая версия) :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, Postgres сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string): Client | null {
const res = db.query(
Mustache.render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0] || null;
}
Можно включать/отключать части запроса, передавать списки столбцов, менять условия. В общем, параметризировать непараметризируемое :)
Исправление Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, Postgres сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string): Client | null {
const res = db.query(
Mustache.render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0] || null;
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)
Исправление Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, Postgres сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string): Client | null {
const res = db.query(
render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0] || null;
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)
Исправление Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, Postgres сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string) {
const res = db.query(
render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0] || null;
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)
Исправление Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, Postgres сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string) {
const res = db.query(
render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0];
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)
Исправление Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя исключительно на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, pg сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string) {
const res = db.query(
render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0];
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)
Исходная версия Deleted, :
Я же не предлагаю строить запросы на основе пользовательских данных. Есть независимый от хранилища слой, предоставляющий функции getClientByPhone, getClientById (вместо него многие используют ORM, что по-моему не совсем правильно). Рендеринг шаблонов внутри этого слоя на контролируемых разработчиком значениях. А пользовательские данные передаются штатными средствами драйвера через $1. (Тут, кстати, pg сосет, т.к не умеет в именованные параметры)
function getClientByPhone(phone: string) {
const res = db.query(
render(GET_CLIENT_BY, { column: 'phone' }),
[phone]
);
return res.rows[0];
}
Можно включать/отключать части запроса, передавать списки столбцов. В общем, параметризировать непараметризируемое :)