質問: $results=DB::select('select * from users where id=?',['1']); という実装の場合に、 文字列で「select * from users where id=1」のような実行SQLを取得する方法はありますか? ある場合、DB::insertやDB::updateも同じ方法で取得できますか?
回答: 「select * from users where id=1」のような一本の文字列のSQL文は、処理のいかなる段階でも発生していません。それはRDBの中ででもです。 「select * from users where id=?」という未完成なSQL文がRDBに渡され、そのままコンパイルされ、その後に1というデータが渡されてコンパイル結果に適用されるという流れになります。 このような扱いをしているからこそSQLインジェクションが防げます。 「select * from users where id=1」という文字列がどこかで生成されているとしたら、それはとてもまずいことです。