php - 验证确认密码的问题

标签 php mysql mysqli

我在验证确认电子邮件的链接时遇到问题。我可以从我的数据库以 HTML 电子邮件的形式向用户发送确认链接,如下所示

$msg = "
<a href=\"http://asite.ca/assets/functions/confirmation.php?key=$permissionCode\"  target=\"_blank\">Click To Confirm</a>
"; 

$permissionCode 是这样生成的

$permissionCode = substr(md5(rand(1000, 9999999)), 0, 12);

我将其插入到confirm_code字段中。

和 在我的确认.php 中我有

$key    = $_Get["key"];
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = $key";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "We Will Contact You Soon";

} else {
    echo "0 results";
}

但是当用户单击电子邮件中的确认链接时,我得到 0 结果,而数据库中的链接代码相同!您能告诉我为什么会发生这种情况吗?

谢谢

最佳答案

在查询中用单引号将 $key 括起来

$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = '$key'";

按照评论中的要求,请参阅解释......

案例1:

$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = 'SELECT * FROM `contact_request` WHERE `confirm_code` = $key';
echo $sql;

输出为

SELECT * FROM `contact_request` WHERE `confirm_code` = $key

这里如果你看到单引号并不查找变量。 ' ' 内的任何内容都被视为字符串并按原样返回。

情况2:

$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = $key";
echo $sql;

输出为

SELECT * FROM `contact_request` WHERE `confirm_code` = dcd9c750bab0

这里由于查询位于双引号内,因此读取该变量。但被视为 int。

情况3:

$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = '$key'";
echo $sql; 

输出为

SELECT * FROM `contact_request` WHERE `confirm_code` = 'fd7c159e29c6'

这里由于查询位于双引号内,因此读取该变量。但被视为字符串,因为它用单引号封装。

关于php - 验证确认密码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498302/

相关文章:

php - 根据 where 子句从表中选择一列,然后将其与另一个表中的另一列进行匹配

PHP 在 require 时避免 sleep

php - 我的 MySQLi 不只更新插入吗?我的脚本出了什么问题?

php - 如何将表单值(某些具有相同名称)插入到多个 MySQL 行

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 从 PHP 登录页面选择要登录的数据库

javascript - 我需要从本地文件夹检索所有图像(无论数量和名称)并将其显示在我的网站上

php - 是否有任何 Celeryd 或 Celery (for Django/Python) type altenative for Symfony 2 framework

PHP MYSQL 获取带有新行的文本

php - 查询仅返回所有行意图中的 1 行