我在验证确认电子邮件的链接时遇到问题。我可以像这样以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 results
,而数据库中的链接代码相同! 你能告诉我为什么会这样吗?
谢谢
在
查询中用单引号括$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'
这里 由于查询在双引号内,因此读取该变量。 但被视为字符串,因为它用单引号封装。