我正在创建网站的一部分,用于处理订阅时事通讯的用户确认。
选择数据时,我在使用准备好的语句时遇到问题。
这基本上是对通过电子邮件发送给用户并通过从输入的 url 获取信息进行检索的信息进行检查。
因此,数据库中有一个字符串或“键”,它通过电子邮件发送给用户,作为我网站上一个页面的链接,用户的详细信息附加到 url。脚本检查这些键是否匹配
问题是当我运行脚本时会触发错误。这说“错误的钥匙”。
数据库中的密钥 ( $dbkey
) 与电子邮件链接中提供的密钥相同。这与制成的钥匙相同$key
。但问题是,在 while 循环中触发了一个错误,并且$dbkey
没有从数据库中传递数据:
Notice: Trying to get property of non-object in C:\wamp\www\site\script.php on line 35
在 phpmyadmin 中运行的 sql 语句确实返回了正确的结果集。
这是代码:
$confirm= sanitize($_GET['confirm']);
$stmt = $link->prepare("SELECT id, dbkey FROM specials WHERE id = ?");
if (!$stmt)
{
$error = "{$link->errno} : {$link->error}";
include "$docRoot/html/main/error.html.php";
exit();
}
if (!$stmt->bind_param("i", $confirm))
{
$error = "{$stmt->errno} : {$stmt->error}";
include "$docRoot/html/main/error.html.php";
exit();
}
if (!$stmt->execute())
{
$error = "{$stmt->errno} : {$stmt->error}";
include "$docRoot/html/main/error.html.php";
exit();
}
$stmt->store_result();
if ($stmt->num_rows)
{
while ($row = $stmt->fetch())
{
$dbKey = $row->dbkey;
}
$key= sanitize($_GET['key']);
if ($dbKey !== $key)
{
echo 'wrong key';
}
}
else
{
echo 'not in database';
}
我想说以这种方式连接到数据库的所有其他脚本都可以工作,但这是我第一次使用准备好的语句来选择数据。我想知道这个问题是否是由我的编码错误引起的,因此我发布了这个问题。
如果有人能发现我在这里出错的地方,或者可能提供一些关于如何调试代码以查看究竟是什么错误的建议,那将不胜感激!
谢谢!!
编辑:问题只是$key
返回一个字符串但$dbkey
返回空
编辑2:
if ($stmt = $link->prepare("SELECT id, verified, dbkey FROM specials WHERE id=?")) {
$stmt->bind_param("i", $confirm);
$stmt->execute();
$stmt->bind_result($dbId, $dbVerified, $dbKey);
$stmt->fetch();
$stmt->close();
if ($dbKey !== $key)
{
echo 'wrong key';
}
else if ($dbVerified == 1)
{
echo 'already activated';
}
else if ($dbKey == $key && dbVerified == 0)
{
echo 'success';
}
}
else
}
echo 'user not in db';
}