Php 在基于HandlerSocket的原始套接字查询中表示空键值的正确方法
我写了一个轻量级的基于套接字的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查询按如
唯一的
索引,有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
值匹配
希望这能帮助别人