我希望获取行数以检查数据库中是否已存在相同的电子邮件。我尝试了几种机制,但没有成功。当我直接在数据库中运行查询时,它给了我行数,但是通过PDO执行它给了我0。
我已经使用了fetchAll方法来手动计数,甚至使用了行数方法也无法正常工作
$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。
输入数据(或数据库)中很可能存在一些已转换或不可打印的字符。例如,可能存在换行符或特殊编码的符号,或某些字符(例如<并>转换为HTML实体)。结果,查询包含<abc@abcs.com>将永远不会匹配text <abc@abcs.com>。
<
>
<abc@abcs.com>
<abc@abcs.com>
问题是,这只是一个猜测,没有人能告诉您实际的问题是什么,因为它是 您的 数据库, 您的 输入数据,只有 您 才能找到问题。
我写了一篇文章,解释了如何调试PDO问题。
要调试特定问题,您需要
bin2hex()
在一个侧面说明,但很重要的还是:你准备语句是一个货物邪教代码是 保护什么 。它 必须 是这样的:
$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();