Bind variables are good for DML type commands

...
mystr := 'UPDATE mytable SET col1 = :1 WHERE col1 = :2';
EXECUTE IMMEDIATE mystr USING 'A', 'B';
...

IMHO, In using a select into, your biggest worries are that you are not going to get a value, or that you get too many values thus causing a run time error. You should handle this through a function that has error handling and knows what to send back if there are either no results returned or too many results returned. This function should be used anywhere where you need that business logic.

But the SELECT INTO command that you specify is not going to improve by the use of bind variables.