Laravel6.xでPDO + laravel-oc8 + Prepared Statement経由でdatabaseを使うには
プレースホルダーとサニタイズについて調べてたらSQLインジェクション
を対策するならSQLクエリにはプリペアードクエリーを使いましょう
という情報を受信したので、クエリビルダー利用で書いてたけど、
Prepared Statementを使ったサンプルもまとめておかないとと思って
Eloquent ORMを使わず、DB Facadeを利用してる場合で、Prepared Statement
を使うパターンを試してみたのでメモしておく(Φω|
[手順]
1. Controller
(ex)ExamplesController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ExamplesController extends Controller
{
public function example()
{
$pdo = DB::connection('oracle')->getPdo();
$sql = 'select id,name,sum,enddate from tablename';
$stmt = $pdo->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll();
$data = [
'msg' => '検索結果(using pdo)',
'rows' => $rows
]:
return view('example', $data);
}
}
2. View(Blade.template)
@extends('layouts.base')
@section('title', 'target title name')
@section('content')
<h2>{{ $msg }}</h2>
<table>
<tbody>
<tr>
<th>番号</th>
<th>名前</th>
<th>金額</th>
<th>終了日</th>
</tr>
<br>
@foreach($rows as $row)
<tr>
<td>{{ $row['id'] }}</td>
<td>{{ $row['name'] }}</td>
<td>{{ $row['sum'] }}</td>
<td>{{ $row['enddate'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@endsection
3. routing
Route::get('example', 'ExamplesController@example');
[参考サイト]