这是我一直试图弄清楚的事情,它是最简单的查询,似乎不想为我工作(仅在 php mysqli 中,在控制台 sql 中工作)
首先,我使用准备好的语句,只是在专门的 id(来自另一个服务)上寻找匹配项来更新关系以使用我的主键以便更轻松地进行搜索。
查询如下:
$query = "SELECT id
FROM {$this->config->dbprefix}{$table}
WHERE sf_id = ?
LIMIT 1";
我用它作为一行,为了更好的可读性,我把它分开了
然后我检查准备语句是否有效(我在多个地方执行此操作,并且它在其他任何地方都有效。
if(!($ret = $this->dbo->prepare($query))){
//handle error, this part is never called
}else{
//everything is fine, code in here is below
}
到目前为止,一切似乎都很好。手动检查表和前缀表明它们正在工作并引用正确的表。
$ret->bind_param('s',$id);
$ret->execute();
$ret->bind_result($retId);
$ret->fetch();
$count = $ret->num_rows;
问题就在这里,查询总是为 num_rows 返回 0。手动检查查询并在控制台中尝试返回 1 个结果。到目前为止,这是一个如此简单的查询,我只是无法理解为什么它会在其他地方工作,但不是在这里。我确信这是构建它的正确方法(我有许多其他类似的查询)。
我可能会遇到任何困惑吗?容易错过的东西可能会导致这样的查询不返回结果?
编辑:我尝试了进一步的错误处理,并尝试执行 if 测试不会触发错误,但我会尝试更多。
为了扩展,我有$query
变量和id
变量的原始输出。通过组合它们并在控制台中手动尝试查询,我得到了正确的结果。我的想法是准备语句以某种方式转义,导致字符串变量$id
无法正确匹配。虽然这只是猜测。