【发布时间】:2018-10-07 03:42:35
【问题描述】:
我对这个 php 代码有真正的疑虑:
<?php
$sessionid = $_SESSION['id'];
echo $sessionid;
$sql = "SELECT * FROM users WHERE id = '$sessionid';";
$rsults = mysqli_query($conn, $sql);
$resultsCheck = mysqli_num_rows($rsults);
if ($resultsCheck > 0) {
while ($row = mysqli_fetch_assoc($rsults)){
$follow = $row['follow'];
$loc = $row['places'];
echo $follow;
echo $loc;
}
}
$sql = "SELECT * FROM posts WHERE username LIKE '$follow'";
$rsults = mysqli_query($conn, $sql);
$resultsCheck = mysqli_num_rows($rsults);
if ($resultsCheck > 0) {
while ($row = mysqli_fetch_assoc($rsults)){
echo '<div class="posts">';
echo '<img class="img"src='.$row['img'].' width="1500px">';
echo '</div>';
echo '<div class="contain">';
echo '<div class="over">';
echo '<div class="username2">';
echo '<img src="focus.png" width="25px" height="25px" style="padding-right: 10px;">'.'<a href="./Profile.php?data='.$row['username'].'">'.$row['username'].'</a>'.'<img src="loc.png" width="25px" height="25px" style="padding-right: 5px; padding-left: 10px;">'.'<a href="./Location.php?data='.$row['ext'].'">'.$row['ext'].'</a>';
echo '</div>';
echo '<div class="content">';
echo $row['content'];
echo '</div>';
echo '</div>';
}
}else {
echo "There are no results matching your search!";
}
?>
它将输出第一个 select 语句中的变量,但第二个语句仅输出“没有与您的搜索匹配的结果!”。我已经在我的管理员 php 中尝试了使用实际单词(不是变量)的语句,它运行良好,但是当它在网站上时......什么都没有。我想这与变量有关,但我真的不知道所以任何帮助将不胜感激!非常感谢 (而且我知道变量对 sql 注入是开放的,但这个站点只是一个概念证明:)
【问题讨论】:
-
您每次都通过
while循环覆盖变量。当您执行下一个查询时,$follow和$loc将只包含查询返回的最后一行的值。 -
除了 SQL injection 问题 (see fix),对于从第一个查询中找到的最后一个
$follow用户的所有结果,您是指username = '$follow'而不是username LIKE '$follow'? -
也不需要使用两个查询,只需在一个查询中加入
users和posts表即可。 -
@Tigger 如果值中没有通配符,则
LIKE与=相同。 -
Barmar 想告诉你的是添加
%$yourvar%
标签: javascript php html mysql sql