gpt4 book ai didi

php - 数据库中的匹配行出现问题

转载 作者:行者123 更新时间:2023-11-29 15:15:07 27 4
gpt4 key购买 nike

我希望获取行数来检查数据库中是否已存在相同的电子邮件。我尝试了几种机制但没有成功。当我直接在数据库中运行查询时,它会给出行数,但通过 PDO 执行它会给出 0。

我已经使用fetchAll方法手动计数,甚至使用rowCount方法也不起作用

  $sql = 'SELECT count(*) FROM inbox WHERE uid = "'.$email_number.'" AND from_email = "'.$email_f.'"'; 
$result = $link->prepare($sql);
$result->execute();
$number_of_rows = $result->fetchColumn();

问题出在这个 $email_f 上,它包含 html

SELECT count(*) FROM inbox WHERE uid = "6961" 
AND from_email = "abc Offers <abc@abcs.com>"

这是我从 $sql 打印的查询,当我直接在 phpmyadmin 的数据库中执行它时,它工作正常。给我数 3,但通过执行我得到 0。

最佳答案

首先,您必须接受这样一个事实:如果您的查询没有找到任何行,则意味着没有匹配即使您可以发誓数据是正确的嗯>。当查询未返回任何行时,则表示没有与条件匹配的行。所以你必须找出 - 为什么。但首先您需要确保您的查询正确:

SQL错误导致的问题

首先,您需要确保您的查询实际上运行时没有错误,因为“无结果”可能意味着查询中存在错误。详细信息请参阅这些答案:pdomysqli .

状况引起的问题

检查您的条件。有互斥条件,如WHERE col=1 AND col=2 。它永远不会返回任何行。尝试简化条件,直到它开始返回一些行,然后细化条件以获得所需的结果。

<小时/>

但是好吧,没有错误,条件正确,并且您可以发誓表中的数据与您的查询相匹配。尽管如此,仍然存在一些陷阱:

数据引起的问题

首先,如果涉及变量,请确保它存在并且实际上包含一些值。

然后检查值本身。输入数据(或数据库)中可能存在一些转换后的或不可打印的字符。例如换行符或特殊编码的符号,或某些字符,例如 <>转换为 HTML 实体。结果,查询包含 <abc@abcs.com>永远不会匹配文本&lt;abc@abcs.com&gt; .

问题是,这只是一个猜测,没有人可以告诉您实际问题是什么,因为它是您的数据库、输入数据并且只有< strong>您可以找到问题。

我写了一篇文章解释how to debug your PDO issues .

要调试特定问题,您需要

  • 确保 PDO 和 PHP 都启用了完整的错误报告。它确实很有帮助,可以向您展示偶尔出现的打印错误、拼写错误等
  • 仔细检查数据库中的数据和输入以找出差异。 urlencode()函数会有所帮助,显示数据库和输入中的所有不可打印和转换的字符。

连接凭据导致的问题

另一个常见问题是当您有多个数据库并连接到不包含所请求数据的错误数据库时。这个问题类似于this one ,所以只需遵循相同的例程,只检查数据行而不是表列表。

字符集/编码引起的问题

这是一种罕见的情况,但为了确保万无一失,请按照此 great answer 中的 list 进行操作。

不相关但重要的注释

顺便说一句,但仍然非常重要:您准备好的声明是 cargo cult code 无法保护任何内容。这是必须的样子:

$sql = 'SELECT count(*) FROM inbox WHERE uid = ? AND from_email = ?'; 
$result = $link->prepare($sql);
$result->execute([$email_number,$email_f]);
$number_of_rows = $result->fetchColumn();

关于php - 数据库中的匹配行出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59736732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com