haiju's 開発メモ

開発に必要な情報を自分用にメモ

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');

[参考サイト]

stackoverflow.com

saba.omnioo.com

laracasts.com

qiita.com

www.codegrepper.com

phpdelusions.net

broncodev.com

stackoverflow.com

yajrabox.com

blogs.oracle.com

blog.ohgaki.net