gpt4 book ai didi

php - MySQL num_rows 返回误报

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

我有以下查询:

// They have a token and estimate id
if (isset($_GET['estimate_token']) && isset($_GET['estimate_id']))
{
if ($select = $db -> prepare("SELECT estimate_id FROM estimates WHERE estimate_token =?"))
{
$select -> bind_param('s', $_GET['estimate_token']);
$select -> execute();
$select -> store_result();
$select -> bind_result($estimate_id);
$select -> fetch();
if ($select -> num_rows == '0')
{
header ("Location: ./login.php");
}else{
}
$select -> close();
}
}

通过电子邮件向客户提供一个链接,其中包含 token 和数据库中的估算 ID。当他们点击链接时,他们就会得到正确的估计。我遇到的问题是,如果客户手动将estimate_id或estimate_token替换为url中的任何数字,它仍然会让你留在网站上,它应该把你踢到login.php。这很糟糕,因为它允许客户查看系统中的其他估计。

我认为问题在于 $select -> num_rows 抛出误报。

最佳答案

您的逻辑无效 - 您必须找到tokenid都等于$_GET的记录值,因此您需要使用如下查询:

$SELECT estimate_id FROM estimates WHERE estimate_token =? AND estimate_id = ?

这将仅选择一个特定记录。

完整代码如下:

if ($select = $db -> prepare("SELECT estimate_id FROM estimates WHERE estimate_token = ? and estimate_id = ?"))
{
// supposing id is `int`
$select -> bind_param('si', $_GET['estimate_token'], $_GET['estimate_id']);
$select -> execute();
$select -> store_result();
// if you need to know just if row exists
// there's no need for this two lines
//$select -> bind_result($estimate_id);
//$select -> fetch();
if ($select -> num_rows == 0)
{
header ("Location: ./login.php");
} else {
}
$select -> close();
}

关于php - MySQL num_rows 返回误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616312/

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