나는과 같이, 속성으로 인덱스에 자신의 CRC32 형태의 일부 문자열을 스핑크스 말했다 :PHP의 부족와 MySQL의 CRC32 기능은
sql_query = SELECT [...], CRC32(LOWER(color)) AS color, [...], FROM table
sql_attr_uint = color
내가 PHP에가는 몇 가지 측면 검색을 얻으려고 사용자가 위의 colors
중 하나 링크를 클릭 수와 스핑크스가 좁혀 결과, 뭔가 등으로가는 다른 검색 요청을 얻을 것입니다 : MySQL의의 CRC32()가 부호없는 32 비트를 반환하기 때문에
Previous page:
<h3>Narrow down results:</h3>
<p><a href="search.php?query=something&color=1678454">Red (11)</a></p>
<p><a href="search.php?query=something&color=4133605867">Yellow (5)</a></p>
<?php
if (isset($_GET[$name]))
{
$sphinx->SetFilter('color', intval($_GET['color'])); // <-- Uh-oh
}
[...]
$sphinx->Query($query, 'table');
?>
상황이 여기에 잘못 정수, PHP는 매우 도움이되지 않습니다 suppo rt 및 대문자는 2^31-1입니다. 노란색 위의 링크는 내 문제를 노출시킵니다.
StackOverflow,이 문제를 해결할 수있는 방법은 무엇입니까? 나는 SQL 질의 측면에서 몇 가지 수학을하는 것이 가능하다고 생각하지만, 충돌의 걱정할 가능성을 더욱 악화시키는 것에 조심하고 있습니다.
미리 감사드립니다. PHP의 crc32() manual page에서 인용
유효성 검사를 위해'intval'을 사용한다면 (숫자를 제외하고는 스핑크스로가는 이상한 문자는 없습니다),'filter_var (FILTER_SANITIZE_NUMBER_INT, $ _GET [ 'color']);와 같이 사용하면됩니다. , 플러스 마이너스로 로그인하십시오. –