PDO を使用した検索機能に準備済みステートメントを使用しており、like 句を使用しています。Mysqlは5.5.32です
function dblink(){
# hidden #
$conn = new PDO("mysql:host=localhost;dbname=$database",
$username, $password, array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ
));
return $conn;
}
$conn = dblink();
$query = "select * from tablename where attrib like ? ;";
$stmt = $conn->prepare($query);
$stmt->execute(array($_POST['field']."%"));
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
これは、ユーザーが html フォームのフィールドに % を入力すると、すべてのテーブル コンテンツをダンプします。準備されたステートメントがそれを処理し、入力された部分文字列と一致するように実行に % があると思いました。
このような問題が発生しないように、POST フィールドを通常のテキストとしてのみ使用するにはどうすればよいですか?