正在以字节为单位搜索千字节


Searching Kilobytes in Bytes

我有一个列名为recording_size的表。在这一列中,我以字节为单位存储大小,但我在网上显示的是KB大小。

       public static function getKbFromBytes($string){
         if($string){
            return ($string/1024);
          }
       }

现在我在网上有了过滤功能。所以我显示的大小是KB,所以我肯定会接受用户在KB&不是以字节为单位,尽管在DB中我有以字节为单元的。为此,我以KB为单位输入,然后再次将其转换为以下字节:

    public static function getBytesFromKb($string){
        if($string){
         return ($string * 1024);
       }
    }

示例:

size in Bytes = 127232

当我应用函数时,它=124.25 KB现在,当用户写得和124.25完全一样时,搜索就起作用了,但我希望那个用户写的东西不完全一样。用户也可以写124而不是124.54,当用户写124时,我的搜索就不起作用了——这意味着它不显示任何记录。我还有ADD&从转换后的字节中减去50,但不起作用。

   $sql = $sql->where('r.recording_size BETWEEN "'.(Engine::getBytesFromKb($opt['sn']) - 50) .'" AND "'.(Engine::getBytesFromKb($opt['sn']) + 50) .'"');

我怎样才能做到这一点?

搜索大小可能应该是一个范围,而不是相等。至少,默认值应该是范围,除非你的应用程序的主要关注点是确切的大小。对于SQL:

$kb = round($opt['sn']);
$sql = $sql->where('r.recording_size BETWEEN '.($kb * 1024).' AND '.(($kb + 1) * 1024));

顺便说一下,您应该省略引号(")。即使对于字符串,它们也是无效/非标准的。您正在比较int的。

另一件值得关注的事情是KiB与KB的对决。