PHP와 PDO로 간단한 전체 텍스트 검색을 작성하려고합니다. 가장 좋은 방법은 SQL과 PDO를 통해 DB를 검색하는 것입니다. 이 this 스크립트를 찾았지만 이전 MySQL 확장입니다. 이 기능 마녀는 검색 일치를 계산해야한다고 썼지 만 SQL은 작동하지 않습니다. 이 같은 들어오는 검색 문자열의 모습 :PHP와 PDO를 사용한 SQL 전체 텍스트 검색
array('queryString' => $value);
가 있어야한다 : 23+more+people
function checkSearchResult ($searchterm) {
//globals
global $lang; global $dbh_pdo; global $db_prefix;
$searchterm = trim($searchterm);
$searchterm = explode('+', $searchterm);
foreach ($searchterm as $value) {
$sql = "SELECT COUNT(*), MATCH (article_title_".$lang.", article_text_".$lang.") AGINST (':queryString') AS score FROM ".$db_prefix."_base WHERE MATCH (article_title_".$lang.", article_text_".$lang.") AGAINST ('+:queryString')";
$sth = $dbh_pdo->prepare($sql);
$sql_data = array('queryString' => $value);
$sth->execute($sql_data);
echo $sth->queryString;
$row = $sth->fetchColumn();
if ($row < 1) {
$sql = "SELECT * FROM article_title_".$lang." LIKE :queryString OR aricle_text_".$lang." LIKE :queryString";
$sth = $dbh_pdo->prepare($sql);
$sql_data = array('queryString' => $value);
$sth->execute($sql_data);
$row = $sth->fetchColumn();
}
}
//$row stays empty - no idea what is wrong
if ($row > 1) {
return true;
}
else {
return false;
}
}
자세한 답변을 보내 주셔서 감사합니다. 그에 따라 SQL을 변경하고 MySQL 관련 MATCH 연산을 삭제했습니다. 나는로부터 SELECT COUNT (*) \t \t \t'에 SQL을 변경 ". $ db_prefix."_ 기본 \t \t \t article_content_title _ ". $ LANG." \t \t \t LIKE '% 쿼리 문자열 %' \t \t \t 또는 \t \t \t article_content_text _ "$ LANG.." \t \t \t LIKE '% : queryString %' '하지만'queryString '은 대체되지 않습니다. 위와 같은 코드이지만 지적한 구문 오류가 수정되었습니다. 왜 그런가? – wowpatrick
@wowpatrick :'queryString'이 대체되지 않는다고 말할 때, 명령문을 echo 할 때 매개 변수 (': queryString' 부분)가 사용자가 제공 한 문자열로 대체되지 않았다는 것을 의미합니까? 그렇다면 준비된 명령문이 작동하는 방법입니다. 명령문과 매개 변수는 MySQL에 개별적으로 전송됩니다. 클라이언트 (이 경우 PHP)는 두 개를 결합하지 않습니다. 그것들은 개별적으로 보내지기 때문에, MySQL은 어떤 비트가 명령문이고 어떤 비트가 매개 변수인지 알고 있으므로 알아 내기 위해 구문 분석 할 필요가 없습니다. 이것이 SQL 주입에 대한 좋은 방어책 인 이유입니다. – Mike
@wowpatrick : 결합 된 명령문을 보려면 [MySQL 일반 쿼리 로그] (http://dev.mysql.com/doc/refman/5.5/en/query-log.html)를 확인하십시오. 기본적으로 사용 중지되어 있으므로 문서를 먼저 읽고 사용 설정 방법을 확인하십시오. 또한 발생할 수있는 오류를 표시하기 위해 PHP 코드에 행을 추가 했습니까? – Mike