优雅而安全的方式来创建动态查询

时间:2019-06-17 12:22:51

标签: php mysql sql security pdo

我想创建一个动态查询以显示所有发票,如果用户具有主持人等级,并且当用户是简单成员时,则仅显示其发票

  public function getAllBill($user_rank, $user_id){

    $sql = 'SELECT * FROM invoice_user
    INNER JOIN users on users.user_id = invoice_user.user_id';

    $sql_clause = 'WHERE user_id = :user_id)';
    $sql_group  = 'GROUP BY invoice_number ORDER BY invoicedate DESC';

    if ($user_rank === 'member') {
      $final_sql = $sql.' '.$sql_clause.' '.$sql_group;
    } 
    else if ($user_rank === 'moderator'){
      $final_sql = $sql.' '.$sql_group;
    }

    $request = $this->bdd->prepare($final_sql);
    $request->execute(array(
      ':user_id' => $user_id
    ));

    return $request->fetchAll();
  }

我想知道是否有一种更优雅的方法来做到这一点,但尤其要知道一切是否安全,因为他们知道排名和ID来自用户会话({{1 },$_SESSION ['rank']

不将参数表置于某种状态会带来问题吗?

PS:我使用MySQL

0 个答案:

没有答案