?INSERT INTO scouts_a(gender, age, active) VALUES(:gender, :age, :active)

$sqlは上記のような感じで、特に支障はない模様です。
※便宜上パラメーターを3つにしましたが、10ぐらいあり、内容もテーブル名によって変動します。
そのため自動作成したいと考えています。

foreachも間違っていたので修正しておきます。
foreach ($_POST as $key => $value) {
$stmt -> bindValue(":$key", ${$key}, PDO::PARAM_STR);
}

検索してみてもpdo文を自動作成するソースが見つからなかったため、
この方法はひょっとして非推奨なのでしょうか?

手動でも出来なくはない量なのですが、メンテナンス性や可読性のために挑戦してみました。