準備されたステートメントで、フォーミュラーユーザー入力の一部の文字が期待どおりにエスケープされないのはなぜだろうと思っていました。この特定の部分の私のコードは次のとおりです。
if( isset( $_POST['key'] ) && strlen($_POST['key']) <= 15) {
$sql = "SELECT titel, date, content FROM News WHERE content LIKE :content OR titel LIKE :title";
if( $stmt = $pdo->prepare($sql) ) {
$temp = "%".$_POST['key']."%"; // NOT manually escaped here
$stmt->bindParam(':content', $temp); // should escape!?
$stmt->bindParam(':title', $temp); // should escape!?
$stmt->execute();
$stmt->bindColumn("Titel", $title, PDO::PARAM_STR);
$stmt->bindColumn("Datum", $date, PDO::PARAM_STR);
$stmt->bindColumn("Inhalt", $content, PDO::PARAM_STR);
while( $stmt->fetch() ) {
echo "<span class='head'>".$title." :: ".$date."</span><br />".shorten($content)."...<br /><hr>"; // the function shorten just shortens the content for preview reasons
}
// ends statement
$stmt = NULL;
// ends connection
$pdo = NULL;
}
else {
$err .= "statement wasn't prepare()'ed!";
}
}
else {
$err .= "no or false input!";
}
したがって、これは基本的に問題なく動作しますが、「;」と入力すると たとえば、すべての結果を捨てるだけです。そのため、入力が本当に適切にエスケープされるかどうかはわかりません。sth がありませんか、それともすべての文字がエスケープされているわけではありませんか? もしそうなら、それらはどれですか?私はむしろそれらを手動でエスケープしたいと思います。