Подстановка параметров SQL является инъекцией SQL решения.Он пытается разделить функциональные компоненты (например, ключевое слово SELECT, разделитель операторов ;
и т. Д.) И компоненты данных (например, число, строки и т. Д., Которые являются данными, которые совершенно не связаны с функцией SQL)
Смысл параметра в том, чтобы запросить корректный экранирование входных данных, если это необходимо, перед передачей в механизм SQL, чтобы данные оставались данными, а функциональные компоненты были функциональными.
Таким образом, выможет сделать:
SELECT x FROM table_y WHERE z = ?
и передать '""; DROP TABLE table_y'
в качестве параметра, и это в точности строка для сопоставления.Но вы не можете сделать:
SELECT x FROM table_y WHERE ? = '""; DROP TABLE table_y'
и передать 'z'
в качестве параметра и ожидать, что это будет означать то же самое.Потому что когда вы передаете 'z'
, оно интерпретируется как строка, а не имя столбца.Имея эту идею, вы увидите, что SQL в вашем примере будет только превращаться в синтаксическую ошибку SQL.