Я планирую использовать механизмы prepare()
и execute()
для PDO для предотвращения атаки SQL-инъекций.
Обычно заполнители в SQL находятся в условной части.
Например, select name, age from members where age > ? and gender = 'f';
select name, age from members where age > ? and gender = 'f';
Однако можно ли поместить заполнители в выбранную часть?
select name, age, ? from members where age > ? and gender = 'f';
Я знаю, что я не могу помещать имена столбцов, но могу ли я поместить константу? как
select name, age, 'foo' from members where age > ? and gender ='f';
Благодарю.
Неа. PDO не может деактивировать имена столбцов или таблиц.
Если вам действительно нужно использовать динамические имена таблиц, безопасный способ справиться с ними не проверяет, действительно ли они существуют в таблице, и вставляя их в запрос обычным способом.
Псевдо-код:
$fieldname = make_sure_this_field_really_exists($_GET["fieldname"]); $PDO->prepare("select name, age, `$fieldname` from members where age > ? and gender = 'f';" ... );