読者です 読者をやめる 読者になる 読者になる

はむはむエンジニアぶろぐ

このブログのコンセプトは"ハッキングの為なら愛する家族を傷つけることをいとわない" 自分にとってエンジニアリングは "手段ではなく生きる目的" である

PHP 連結するORのSQL文の組み立てにimplodeを使うとよい

f:id:secret_hamuhamu:20150404170600p:plain
不特定数のパラメタを受け取って連結するORのSQL文を動的に組み立てるコードを書くことはよくあると思います。
こんなやつ。

  SELECT
    *
  FROM
    FRUITS
  WHERE
(NAME = りんご OR NAME = みかん OR NAME = ぶどう)

implode関数を使えば、スッキリ書くことが出来ます。

環境構成

  • PHP 5.4.38


ソースコード

implode関数は、配列の要素を特定の文字列で連結してくれる。

<?php

$params = ['りんご', 'みかん', 'ぶどう'];

$sql = '
  SELECT
    *
  FROM
    FRUITS
  WHERE
';

foreach($params as $param) {
    $sqlFragments[] = sprintf('NAME = %s', $param);
}

$sql .= sprintf('(%s)', implode(' OR ', $sqlFragments));

こんだけ。
サンプルコードだから、インジェクション発生するとか言わないで。


最近読んだ本

PHP+MySQLマスターブック

PHP+MySQLマスターブック

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

PHP Hacks ―プロが教えるWebプログラミングテクニック

PHP Hacks ―プロが教えるWebプログラミングテクニック