P粉8264299072023-08-14 15:05:22
首先,你必须接受这个事实:如果你的查询没有找到任何行,那就意味着没有匹配,即使你可以发誓数据是正确的。当查询返回没有行时,就没有行与条件匹配。所以你必须找出原因。但首先你需要确保你的查询是正确的:
首先你需要确保你的查询实际上没有错误,因为“没有结果”可能意味着查询中有错误。有关详细信息,请参考这些答案:pdo和mysqli。
检查你的条件。有一些互斥的条件,比如WHERE col=1 AND col=2
。它永远不会返回任何行。尝试简化条件,直到它开始返回一些行,然后细化条件以获得所需的结果。
但是好吧,没有错误,条件是正确的,你可以发誓表中有数据与你的查询匹配。然而,还是有一些陷阱:
首先,在涉及到变量的情况下,确保它存在并且实际上包含一些值。
然后检查值本身。输入数据(或数据库)中可能存在一些转换或不可打印的字符。例如换行符或特殊编码的符号,或一些字符如<
和>
转换为HTML实体。结果是,查询包含<abc@abcs.com>
将永远不会匹配文本<abc@abcs.com>
。为了快速检查,你可以使用rawurlencode()
函数,它会将所有非拉丁字符转换为代码,从而使它们可见。
问题是,这只是一个猜测,没有人能告诉你实际的问题是什么,因为这是你的数据库,你的输入数据,只有你能找到问题。
我写了一篇文章,解释了如何调试你的PDO问题。
要调试特定的问题,你需要:
urlencode()
函数会有所帮助,它会显示数据库和输入中的所有不可打印和转换字符。另一个常见问题是当你有多个数据库并连接到错误的数据库时,它没有所请求的数据。这个问题类似于这个问题,所以只需按照相同的步骤进行检查,只不过不是检查表的列表而是数据行。
这是一个罕见的情况,但为了确保,按照这个很好的答案的清单进行检查。