日々夢想

つれづれなるままに ひぐらし すずりにむかいて 

POD::bindParam()とPOD::bindValue()

SQLインジェクション対策にPOD::bindParam()かPOD::bindValid()が必要。
bindParam():変数の参照をバインド。値はexecute()時に決定。
bindValid():値をバインド。バンドした時点で値が確定される。

<?php 

$sql = 'SELECT * FROM table WHERE condition=:condition;';
$stmt = $dbh->prepare($sql);

$condition = 'CONDITION';
$stmt->bindParam(':condition', $condition);
$condition = 'NOTHING';
$stmt->execute();//SELECT * FROM table WHERE condition='NOTHING'を実行

$condition = 'CONDITION';
$stmt->bindValue(':condition', $condition);
$condition = 'NOTHING';
$stmt->execute();//SELECT * FROM table WHERE condition='CONDITIONを実行

ユーザからの入力は全てプログラムでのチェックが必要と学習。
htmlspecialcharsしかりbindParamしかり。