No.471


【CakePHP】生SQLに安全に値を仕込む

生SQLのサニタイズってどうやるの…

 生SQL中に直接値を書き込まずにプリペアードステートメントを使うことで、サニタイズの自動化がおこなえる。
 また、なにより視覚的にも解りやすく記述することができる。

データベースの基本 > プリペアードステートメント

use Cake\Datasource\ConnectionManager;

$connection = ConnectionManager::get('default');
$results = $connection
    ->execute('SELECT * FROM テーブル名 WHERE カラム1=:value1', ['value1' => '値'])
    ->fetchAll('assoc')

 これにより下記のSQLが実行される。

SELECT * FROM テーブル名 WHERE カラム1=値;

 この方法最大の利点は、サニタイズだけでなく、文字列の囲み処理もCakePHPに任せてよいところだと思う。手動で行うととにかくソースが見づらくなるので。
 フレームワークを多用するとプログラム能力が落ちるという意見もあるが、開発で使わざるを得ないなら最大限使い倒そう。

 …なんかこの台詞、前にも書いたな…