если подстановки идут в середине строки или их больше одной - использую sprintf.
Вот такой код мне совсем не нравится (пример придуман из головы):
$str = 'select `field` from `' . $table . '` where id = "' . $val . '"';
Особенно, мне не нравятся сочетания кавычек перед/после $table
Так куда лучше:
$str = sprintf(
"select `%s` from `%s` where `id` = '%d'",
$field,
$table,
$id
);
Логика такова: при использовании формата, у нас целевая строка цельная, мы можем быть уверенными, что в ней нет никаких операторов (чем меньше операторов, тем легче читать) и неверного их сочетания.
В строке с конкатенацией у нас куча операторов, в которых мы можем ошибиться - попробуйте навскидку изменить тип кавычек в этой строке с двойных на одинарные.