gpt4 book ai didi

PHP/MySQL - 准备好的语句 - 此示例中的用法正确吗?

转载 作者:行者123 更新时间:2023-11-29 14:24:26 25 4
gpt4 key购买 nike

我正在创建网站的一部分,用于处理用户订阅新闻通讯的确认。

在选择数据时,我在使用准备好的语句时遇到问题。

这基本上是对通过电子邮件发送给用户的信息进行检查,并通过从输入的网址获取信息来检索信息。

因此,数据库中有一个字符串或“ key ”,它作为指向我网站页面的链接在电子邮件中发送给用户,并将用户详细信息附加到 URL 中。该脚本检查这些键是否匹配

问题是当我运行脚本时它会触发错误。这表示“ key 错误”。

数据库中的 key ($dbkey) 与电子邮件链接中提供的 key 相同。这与 $key 中的 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';
}

最佳答案

$stmt->fetch()仅返回一个 bool 值,指示是否成功,而不是返回一个属性为当前行字段的对象。您需要调用$stmt->bind_result()指定要将字段放置到哪些变量中。

第二次编辑中采用的方法看起来不错,除了测试用户是否在数据库中应该在fetch(),而不是prepare() (或者像以前一样使用num_rows)。因此:

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);

if ($stmt->fetch())
{
if ($dbVerified == 1)
{
echo 'already activated';
}
else if ($dbKey !== $key)
{
echo 'wrong key';
}
else if ($dbKey == $key && dbVerified == 0)
{
echo 'success';
}
}
else
}
echo 'user not in db';
}

$stmt->close();
}

关于PHP/MySQL - 准备好的语句 - 此示例中的用法正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com