我正在寻找行数来检查相同的电子邮件是否已经在数据库中。我尝试了几种机制,但没有成功。当我直接在数据库中运行查询时,它给了我行数,但通过 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,它包含 htmlSELECT count(*) FROM inbox WHERE uid = "6961" AND from_email = "abc Offers <abc@abcs.com>"这是我从 $sql 打印的查询,当我直接在 phpmyadmin 中的数据库中执行它时,它工作正常。给我计数 3 但通过执行我得到 0。
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
数据引起的问题
输入数据(或数据库)中很可能存在一些已转换或不可打印的字符。例如,可能有换行符或特殊编码的符号,或某些字符,例如<
转换>
为 HTML 实体。因此,查询 contains<abc@abcs.com>
永远不会匹配 text <abc@abcs.com>
。
问题是,这只是一个猜测,没有人能告诉你真正的问题是什么,因为它是你的数据库,你的输入数据,只有你能找到问题。
我写了一篇文章来解释如何调试您的 PDO 问题。
要调试特定问题,您需要
确保为 PDO 和 PHP 启用了完整的错误报告。它真的很有帮助,向您展示偶尔的印刷错误、拼写错误等
仔细检查数据库中的数据和输入以找出差异。
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();
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消