我告訴獅身人面像索引他們的CRC32形式的一些字符串作爲屬性,像這樣:PHP缺乏無符號整數的和MySQL的CRC32功能
sql_query = SELECT [...], CRC32(LOWER(color)) AS color, [...], FROM table
sql_attr_uint = color
我試圖得到一些面搜索在PHP,要去往何處用戶可以點擊一個鏈接上述colors
之一,獅身人面像會得到另一個搜索請求與縮小的結果,像去:
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');
?>
事情不順心這裏,因爲MySQL的CRC32()返回一個32位無符號整數,哪個PHP非常有幫助不支持rt和2^31-1上限。上面的顏色黃色鏈接暴露了我的問題。
StackOverflow,什麼可能是一個可接受的解決方法呢?我想在SQL查詢方面做一些數學運算是可能的,但我擔心會讓更令人擔憂的碰撞機會變得更糟。
在此先感謝。
如果你正在做'intval'驗證的目的(沒有奇怪的字符去獅身人面像除數字),我會去'filter_var(FILTER_SANITIZE_NUMBER_INT,$ _GET ['顏色']);'which'll允許數字,加號和減號登錄。 –