Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';s缺少未签名的int和MySQL';s CRC32功能_Php_Mysql_Sphinx - Fatal编程技术网

PHP';s缺少未签名的int和MySQL';s CRC32功能

PHP';s缺少未签名的int和MySQL';s CRC32功能,php,mysql,sphinx,Php,Mysql,Sphinx,我告诉Sphinx将CRC32形式的一些字符串作为属性进行索引,如下所示: sql_query = SELECT [...], CRC32(LOWER(color)) AS color, [...], FROM table sql_attr_uint = color 我正在尝试在PHP中进行一些分面搜索,用户可以单击带有上述颜色之一的链接,Sphinx将获得另一个搜索请求,搜索结果将缩小,例如: Previous page: <h3>Narrow down results:<

我告诉Sphinx将CRC32形式的一些字符串作为属性进行索引,如下所示:

sql_query = SELECT [...], CRC32(LOWER(color)) AS color, [...], FROM table

sql_attr_uint = color
我正在尝试在PHP中进行一些分面搜索,用户可以单击带有上述
颜色之一的链接,Sphinx将获得另一个搜索请求,搜索结果将缩小,例如:

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非常有帮助地不支持该整数,并将其上限设置为2^31-1。上面的黄色链接暴露了我的问题

StackOverflow,什么是可以接受的解决方法?我认为在SQL查询端进行一些计算是可能的,但我担心会使令人担忧的冲突更加严重

提前感谢。

引用PHP的:

因为PHP的整数类型是有符号的,而且许多crc32校验和都是有符号的 如果生成负整数,则需要使用的“%u”格式化程序 sprintf()或printf()来获取未签名字符串的字符串表示形式 crc32校验和

换句话说,PHP无法处理大整数,但在这种情况下,您可以模拟无符号整数以达到双精度。您可以在转换为字符串时获得实际值

这应该足够了,因为你不需要做数学运算,比如加法或乘法


更新:我想我忽略了你问题的关键部分。与此相反:

intval($_GET['color'])
。。。您可以使用正则表达式验证或筛选:

preg_match('/^\d+$/', $_GET['color'])
preg_replace('[^\d]', '', $_GET['color'])

。。。并将CRC值作为字符串处理。

如果您正在执行
intval
以进行验证(除了数字之外,sphinx没有奇怪的字符),我会使用
filter\u var(filter\u SANITIZE\u NUMBER\u INT,$\u GET['color'])允许数字、加号和减号。不知道Sphinx可以将其作为字符串。谢谢你的洞察力!