转换为准备好的语句



这是我正在使用的当前PHP脚本:

$query = "SELECT * FROM tbl WHERE status='Godkjent' AND team='{$_SESSION['team']}' ORDER BY date DESC LIMIT 5";
if ($result = $link->query($query)) {
$num_rows = 0;
while ($row = $result->fetch_assoc()) {
$num_rows++;


echo "{$row['pp']}";

// determine if user has already liked this post
$results = mysqli_query($link, "SELECT * FROM kudos WHERE sale_id='{$row['id']}' AND ident_id='{$_SESSION["ident"]}'");
$resultSet = $link->query("SELECT kudos.sale_id as TheID, kudos.ident_id AS TheIdent from kudos,tbl where kudos.sale_id = '{$row['id']}' AND tbl.id = kudos.sale_id");
if (mysqli_num_rows($results) == 0 ) { // Not liked
echo "<a style='color:#FFFFFF' class='btn' href='kudos.php?id={$row['id']}'> 🔥 $resultSet->num_rows </a>"; // Gonna remove this
} else { // Has liked
echo "<b style='color:#FFFFFF' class='btn'> 🔥 $resultSet->num_rows </b>"; // Gonna remove this
}
}
/*freeresultset*/
$result->free();
}

简要解释了resultsresultSet查询:检查当前用户是否喜欢帖子。显示每5个帖子的点赞总数。如果已经点赞,不要再点赞用户点赞的帖子。

所以我正在查询tbl表中的最后5行。在该查询中,我有另一个查询,它从kudos表中选择所有值,其中sale_id等于第一个查询的行id。我知道我现在使用的解决方案对SQL注入不安全,所以我试图查看准备好的语句。有人能帮我把这些问题转化为事先准备好的陈述吗?

有一个非常简单的库,您可以使用名为simple PDO的准备好的语句。

使用它,你可以做这样的事情:

$results = $db->select("SELECT * FROM tbl 
WHERE status = :status 
AND team = :team
ORDER BY date DESC LIMIT 5", [
'status' => 'Godkjent',
'team' => $_SESSION['team']
]
);

最新更新