Безопасно или нет использовать переменную POST, как показано ниже:
$stmt->bindParam(':'.$_POST[$field],$val);
или мне нужно проверить POST VARS раньше?
Вы должны использовать переменные $ _POST в качестве значение, не имя параметра.
Переменная $ _POST может содержать пробелы или другие символы, которые не являются допустимыми частями имени параметра. Я обеспокоен тем, что если вы делаете то, что вы показываете, что вы сформировали SQL-запрос, как это:
$sql = "SELECT * FROM mytable WHERE mycolumn = :" . $_POST[$field];
Который определенно не безопасно.
И нет никаких причин для того, чтобы имена параметров были установлены для пользовательского ввода таким образом. Имена параметров должны быть зафиксированы вами, программистом:
$sql = "SELECT * FROM mytable WHERE mycolumn = :myparam";
Затем вы связываете, используя то же имя. Кстати, если вы используете достаточно свежую версию PHP, вам не нужен префикс двоеточия в вызове bind. Вам нужно только это в SQL.
$stmt->bindParam("myparam", $_POST[$field]);
Других решений пока нет …