? は、place holder。
それを使わないと、SQL インジェクションされるから危険

例えば、文字列を連結させて、クエリー文を作っていると、
「1=1 or テーブル削除文」みたいに、関係のない文も入れてくる

?を使うと、そういう危険な文をエラーにしてくれる