エンジニア足立のコーディング日記

エンジニア足立のコーディング日記

ブログトップへ >> 『2015年3月』の記事一覧

RSS プレースホルダ(プリペアド・ステートメント)

この記事を読むのに掛る所要時間: 350

私が入社する前に外注先に組んで貰ったかなり古いプログラムになるのですが、

SQLインジェクションに関する不具合が見つかりました。

で、コード解析を行いながら、

該当箇所をチェックすることに。

確かに、

select * from テーブル名 where code=$code

などというまずい記述が見つかりました。

ここは、当然プレースホルダ(プリペアド・ステートメント)を使うところですね!!

この程度であれば、

制作をした外注先に依頼するまでもなく、

弊社で対応可能だったので、

その際のメモ書きです。

やりたい事は、

ある沿線コードに紐づくレコードを全て取得することです。

ざっくりですが、

コードは以下の様になります。↓↓↓
※実際には各機能を関数化して、もう少し見栄えよくしています。
=======================================================
$dbname   = “データベース名”;
$hostname = “ホスト名”;
$user     = “ユーザー名”;
$pass     = “パスワード”;
$chara    = “文字コード”;

//取得したい沿線のコード
$line_code = “YL0001″;

$db_conf = “mysql:dbname={$dbname};host={$hostname}”;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => “SET NAMES {$chara}”,);

try{
    //MySQLサーバへ接続
    $pdo = new PDO($db_conf, $user, $pass, $options);
}catch(PDOException $e){
    //エラー処理
    var_dump($e->getMessage());
    exit();
}

//「?」付きでSQLを設定
$sql = “select linename from sample_table where line_code=?”;

//prepareメソッドを実行
$stm = $pdo->prepare($sql);

if($stm === false){
    失敗した場合の処理;
}else{
    //パラメータにバインド
    $stm->bindValue(1, $line_code, PDO::PARAM_STR);
    //実行する
    $stm->execute();
    while($values = $stm->fetch()){
        $linename .= $values[“linename”] . “/”;
    }
}

$pdo = null;
$stm->closeCursor(); //MySQL接続を閉じる
=======================================================

もし、

レコードを取得する条件パラメータが複数になる場合には、
=======================================================
//取得したい沿線のコード
$line_code01 = “YL0001″;
$line_code02 = “YL0002″;

//「?」付きでSQLを設定
$sql = “select linename from sample_table where line_code=? or line_code=?”;

//prepareメソッドを実行
$stm = $pdo->prepare($sql);

if($stm === false){
    失敗した場合の処理;
}else{
    //パラメータにバインド
    $stm->bindValue(1, $line_code01, PDO::PARAM_STR);
    $stm->bindValue(2, $line_code02, PDO::PARAM_STR);
    //実行する
    $stm->execute();
    while($values = $stm->fetch()){
        $linename .= $values[“linename”] . “/”;
    }
}
=======================================================
といった感じに改良してやれば、

大丈夫だと思います。

このページのTOPへ戻る

著者情報

足立 拓也(あだち たくや)
1980年生まれ。
出身:兵庫県丹波市。
趣味:ボクシングジム通い。
特技:歴史の話しをすること。
一言:頑張って面白いブログを書きます。

月別アーカイブ

  •  

    • [+]2016 (49)
    • [+]2015 (86)
    • [+]2014 (81)
    • [+]2013 (104)
    • [+]2012 (78)
  • カテゴリー