【发布时间】:2022-01-21 19:22:19
【问题描述】:
我有一个 sql 查询,我希望它也只显示登录用户的信息。我在想我是否可以在查询中添加另一个 where 子句以添加:username = '".$_SESSION['login_user']."'
这是我的查询:
$sql= "
SELECT
user.username,books.bid,name,authors,edition,
status,approve,issue,issue_book.return
FROM user
inner join issue_book ON user.username=issue_book.username
inner join books ON issue_book.bid=books.bid
WHERE issue_book.approve ='$exp'
ORDER BY `issue_book`.`return` DESC";
有人知道我会如何写这个来实现我想要的吗?
这是我的完整代码:
<!-- Updated navbar for logged in user -->
<?php
if($_SESSION['login_user'])
{
include "navbar_user.php";
}
?>
<h2 style = "text-align: center; padding: 2%;">Your Expired Books </h2>
<?php
if(isset($_SESSION['login_user']))
{
$exp = 'EXPIRED';
$session_value = $_SESSION['login_user'];
$sql= "SELECT user.username,books.bid,name,authors,edition,status,approve,issue,issue_book.return FROM user inner join issue_book
ON user.username=issue_book.username inner join books ON issue_book.bid=books.bid WHERE issue_book.approve ='$exp' AND username = ".$_SESSION['login_user']."
ORDER BY `issue_book`.`return` DESC";
$res = mysqli_query($db,$sql);
if(mysqli_num_rows($res)==0)
{
echo "You have no expired books.";
}
else
{
?>
<table class = 'table table-bordered'>
<tr style='background-color: #abb79b; color: white;'>
<th>Username</th>
<th>BID</th>
<th>Book Name</th>
<th>Authors Name</th>
<th>Edition</th>
<th>Status</th>
<th>Return Date</th>
</tr>
<?php
while ($row = mysqli_fetch_assoc($res)) {
?>
<tr style = 'background-color: white;'>
<td><?php echo $row['username'] ?></td>
<td><?php echo $row['bid'] ?></td>
<td><?php echo $row['name'] ?></td>
<td><?php echo $row['authors'] ?></td>
<td><?php echo $row['edition'] ?></td>
<td><?php echo $row['status'] ?></td>
<td><?php echo $row['return'] ?></td>
</tr>
<?php
}
}
}
else
{
echo "</br></br></br>";
echo "<h2><b>";
echo "Please login first.";
echo "</b></h2>";
}
?>
</table>
【问题讨论】:
-
我认为你只是在问
AND,所以,WHERE abc=1 AND xyz=2,除非我错过了什么? -
@ChrisHaas 当我这样做时,我收到此错误致命错误:未捕获的 TypeError:mysqli_num_rows():参数 #1 ($result) 必须是 mysqli_result 类型,bool 给定及其在这一行:如果(mysqli_num_rows($res)==0)
-
@DJDog 这只是意味着查询失败。完整发布您尝试过的内容。如果您在没有表限定符的情况下键入
username,这可能会返回一个歧义错误,我想您在查询前面限定了user.username是有原因的 -
两件事:(1) 你的代码对 SQL 注入是开放的。请不要把这个放到互联网上。 (2)您在用户名周围缺少引号:
AND username = '". $session_value ."'(自设置以来使用的变量)???? -
那么你有不止一件事要看。您可能会遇到“模棱两可”的错误,因为
username是在多个表中定义的,但您没有在WHERE语句中说明要使用哪个。