$results=DB::select('select * from users where id=?',['1']);
という実装の場合に、
文字列で「select * from users where id=1」のような実行SQLを取得する方法はありますか?
ある場合、DB::insertやDB::updateも同じ方法で取得できますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
すでに解決したことになっていますが、Laravelの場合だとEloquentを使っている場合であれば取得可能です。また、クエリビルダでも実行後であれば実行されたSQLが取得できます!
Eloquentの場合だと、getメソッドで取得してくる部分をtoSqlメソッドに切り替えることで実際に実行されるSQL文を取得することが出来ます。
例
User::where('id',1)->toSql();
実行後のクエリを見るためには、先にそのメソッドを実行する前に
DB::enableQueryLog();
を記述した上で、実行後にDB::getQueryLog()
メソッドを利用することで、そのクエリの内容や、かかった時間等を取得することが可能です!
DB::enableQueryLog(); $results=DB::select('select * from users where id=?',['1']); dd(DB::getQueryLog());
投稿2016/02/06 02:59
編集2016/02/06 03:03総合スコア2158
0
ベストアンサー
「select * from users where id=1」のような一本の文字列のSQL文は、処理のいかなる段階でも発生していません。それはRDBの中ででもです。
「select * from users where id=?」という未完成なSQL文がRDBに渡され、そのままコンパイルされ、その後に1というデータが渡されてコンパイル結果に適用されるという流れになります。
このような扱いをしているからこそSQLインジェクションが防げます。
「select * from users where id=1」という文字列がどこかで生成されているとしたら、それはとてもまずいことです。
投稿2016/02/05 00:46
総合スコア5570
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/05 02:01
退会済みユーザー
2016/02/05 02:54
2016/02/05 03:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/06 05:56