我想知道为什么在我准备好的语句中,来自公式用户输入的某些字符没有像我预期的那样被转义。这是我在这个特定部分的代码:
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!";
}
所以这基本上可以正常工作,但是当我输入';' 例如,它只是抛出每个结果。所以我不确定它是否真的正确地转义了输入。我错过了某事还是没有所有字符都转义了?如果是的话,它们是什么?我宁愿手动逃脱它们。