【问题标题】:Can I have two where clauses in my SQL Query so I can add $_SESSION?我可以在我的 SQL 查询中有两个 where 子句以便我可以添加 $_SESSION 吗?
【发布时间】: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 语句中说明要使用哪个

标签: php mysql sql database


【解决方案1】:

使用 and(&&) 运算符 它可能允许根据需要添加尽可能多的条件

【讨论】:

  • 在我的查询中将 AND 更改为 &&,但我仍然收到错误:致命错误:未捕获的类型错误:mysqli_num_rows():参数 #1 ($result) 必须是 mysqli_result 类型,bool 给定
  • 这意味着我的查询失败了?我的查询有什么问题,您能看到问题吗?
  • 根据 PHP 文档:mysql_query - Manual[^] - 当查询语句失败时,调用返回布尔值 FALSE。首先检查您的查询是否有效?只需打印它并查看它提供了什么数据
  • 语法流程很好,只需检查您的数据是否正常?让调试启动基地
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2015-01-29
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2013-04-13
  • 2017-07-18
相关资源
最近更新 更多