Beim Abgleich von Zeilen in der Datenbank ist ein Problem aufgetreten.
P粉005105443
2023-07-25 10:47:08
<p>Ich möchte die Zeilenanzahl abrufen, um zu überprüfen, ob dieselbe E-Mail bereits in der Datenbank vorhanden ist. Ich habe mehrere Methoden ohne Erfolg ausprobiert. Wenn ich die Abfrage direkt in der Datenbank ausführe, gibt sie mir die Anzahl der Zeilen zurück, aber über die Ausführungsmethode von PDO gibt sie 0 zurück. </p>
<p>Ich habe versucht, manuell mit der fetchAll-Methode zu zählen und habe sogar die rowCount-Methode verwendet, aber beides hat nicht funktioniert. </p>
<pre class="brush:php;toolbar:false;">$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();</pre>
<p>Das Problem liegt in der Variablen $email_f, die HTML-Code enthält. </p>
<pre class="brush:php;toolbar:false;">SELECT count(*) FROM inbox WHERE uid = "6961"
AND from_email = "abc Offers <abc@abcs.com>"</pre>
<p>Dies ist die Abfrageanweisung, die ich aus $sql ausgedruckt habe. Wenn ich sie direkt in phpMyAdmin ausführe, funktioniert sie einwandfrei und gibt eine Zeilenanzahl von 3 zurück, aber über die Ausführungsmethode gibt sie 0 zurück. </p>
首先,您必须接受这样一个事实:如果您的查询没有找到任何行,这意味着没有匹配,即使您可以发誓数据是正确的。当查询不返回任何行时,说明没有行与条件匹配。因此,您需要找出原因所在。但首先,您需要确保您的查询是正确的:
由SQL错误引起的问题
首先,您需要确保查询实际上没有错误,因为“没有结果”可能意味着查询中有错误。有关详细信息,请参考以下答案:pdo和mysqli。
由条件引起的问题
检查您的条件。有一些互斥的条件,例如WHERE col=1 AND col=2。它永远不会返回任何行。尝试简化条件,直到它开始返回一些行,然后细化条件以获得所需的结果。
但是好吧,没有错误,条件也正确,您可以发誓表中有数据与您的查询匹配。然而,仍然存在一些陷阱:
由数据引起的问题
首先,在涉及变量的情况下,请确保变量存在并实际包含某些值。
然后检查值本身。输入数据(或数据库)中可能存在一些转换或不可打印的字符。例如,换行符或特殊编码的符号,或者某些字符(如<和>)转换为HTML实体。结果是,查询包含<abc@abcs.com>的文本将永远不会匹配文本<abc@abcs.com>。您可以使用rawurlencode()函数进行快速检查,它将将所有非拉丁字符转换为代码,从而使它们可见。
问题在于,这只是一个猜测,没有人可以告诉您实际的问题是什么,因为这是您的数据库,您的输入数据,只有您自己才能找到问题所在。
我写了一篇文章,解释了如何调试您的PDO问题。要调试特定的问题,您需要:
由连接凭据引起的问题
另一个常见问题是当您有多个数据库并连接到错误的数据库时,该数据库没有所请求的数据。这个问题与之前的类似,所以只需按照相同的步骤进行,只是检查的不是表的列表,而是数据行。
由字符集/编码引起的问题
这是一个罕见的情况,但为了确保,按照这个很好的答案