Php 在基于HandlerSocket的原始套接字查询中表示空键值的正确方法

Php 在基于HandlerSocket的原始套接字查询中表示空键值的正确方法,php,mysql,sockets,nosql,handlersocket,Php,Mysql,Sockets,Nosql,Handlersocket,我写了一个轻量级的基于套接字的HandlerSocket查询系统,它工作得非常好。。。。除了这个小问题 我在数据库中有一个表,它有一个唯一的索引,有5个关键部分: function, type, parameter, Module_ID, Site_ID 所有都是字符串,前4列是必需的,最后一列(Site_ID)不是,它可能是NULL。简要说明是,所有站点都共享具有Site\u ID=NULL的记录,但是每个站点都可以使用其提供的特定Site\u ID覆盖默认记录 My Sockets查询按如

我写了一个轻量级的基于套接字的HandlerSocket查询系统,它工作得非常好。。。。除了这个小问题

我在数据库中有一个表,它有一个
唯一的
索引,有5个关键部分:

function, type, parameter, Module_ID, Site_ID
所有都是字符串,前4列是必需的,最后一列(Site_ID)不是,它可能是
NULL
。简要说明是,所有站点都共享具有
Site\u ID=NULL
的记录,但是每个站点都可以使用其提供的特定
Site\u ID
覆盖默认记录

My Sockets查询按如下方式准备请求:

$request = array(
            'indexid' => $key,
            'op' => $query->get_type(),
            'vlen' => count($query->get_keys()),
            'keys' => implode("\t",$query->get_key_values()),
            'limit' => $query->get_limit(),
            'offset' => $query->get_offset());

// Join as TAB separated values
$request = implode("\t",$request)."\n";
因此,当提供所有5列部分和键值时,它工作;当提供前4列和前4个键值时,它工作;但当使用所有5列及其对应的键值,第5列为
NULL
时,当我知道存在与前4个匹配且具有
NULL
Site\u ID的记录时,它将不返回任何内容

我必须能够使用第三个场景,因为我需要确保它不匹配任何已定义站点ID的场景

我假设问题在于
\t
连接的键值,但我不确定这里使用的正确值是匹配空列值。。。因为它不是
NULL


如果有人能解释一下格式化此请求的正确方法,使其与
NULL
5列匹配,我将不胜感激

所以最后,它有助于重新RTM。。。可在此处找到:

在开头的部分
基本语法
,它指出:

NULL is expressed as a single NUL(0x00).
因此,我将我的关键价值准备调整为:

$values = $query->get_key_values();
foreach ($values as $vid => $value) { if (!isset($value)) { $values[$vid] = "\x00"; } }
$values = implode("\t",$values); // TAB Separated
这将使用十六进制空字节替换所有本机
NULL
值,该字节与空字符串不同,允许服务器将列与
NULL
值匹配

希望这能帮助别人