// Check and set search
if($_POST['searchQuery'] !== "null"){
$search = $_POST['searchQuery'];
$search = explode(' ', $search);
//long words are more than 4
$longwords = '';
$shortwords = '';
$searchCount = count($search);
foreach ($search as $word) {
$word = trimplural($word);
if ($searchCount > 1){
if (strlen($word) > 3) {
if (!in_array($word,array('sale','brand','lots'))){
$longwords.=' +'.$word;
} //check for words
}else{ //else 3 letters
if (strlen($word) == 3) {
if (!in_array($word,array('and','the','him','her','for','new','you'))){
$shortwords.= " OR (fname LIKE '%$word%' OR lname LIKE '%$word%') ";
} //search for words
}//strlen == 3
}
}else{//else searchcount == 1
if (!in_array($word,array('and','the','him','her','for','new','you'))){
$shortwords.= " OR (fname LIKE '%$word%' OR lname LIKE '%$word%') ";
}
}
}
}else{
$search = null;
}
는 SQL이다 :검색 쿼리가 안전하지 않은
$sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:longwords IN BOOLEAN MODE) $shortwords LIMIT " . $postnumbers . " OFFSET ".$offset;
$q1 = $conn->prepare($sql) or die("failed!");
$q1->bindParam(':uniid', $uniid, PDO::PARAM_STR);
$q1->bindParam(':longwords', $longwords, PDO::PARAM_STR);
$q1->execute();
나는 위의 코드를 같이 사용하여 생성되는 검색 쿼리가, 나는이 MySQL의 전체 텍스트 검색 및 LIKE 쿼리의 결합 사용하고 싶습니다. 이 작업을 수행하기 위해 SQL 쿼리의 일부를 변수 $shortwords
에 추가하여 작동하도록 LIKE 부분을 가져 왔지만 SQL 주입 때문에이 옵션이 가장 좋음을 이해합니다.
SQL에 구현하기 전에이 쿼리를 '더 안전하게'만들거나 출력 결과를 삭제할 수 있습니까?
답장을 보내 주셔서 감사합니다. 불행히도 짧은 단어 목록은 최종 결과에서이 단어들을 제외시킵니다. – neeko
다시 한번 감사드립니다! PDO :: quote를 어떻게 사용하는지 예제를 제공 할 수 있습니까? 그리고 큰 외침 나는 다른 매개 변수들 역시 묶을 것입니다! – neeko
@neeko, 환영합니다. 도움이 될 수있어서 기쁩니다! – superultranova