安全地动态更改SQL语句

时间:2017-03-29 15:06:29

标签: php mysql oop mysqli

我班上有以下方法。我的目标基本上是找到数据库中的所有管理器,但是可以选择限制sql语句。例如" AND U.username='jake56'" AND A.firstName='Jake'。我想知道这是否安全,可以选择添加限制,因为它易受SQL注入。

/**
  * Returns an array of manager Users
  * @param string (optional) $limits - limit the query EX: 'AND U.userId > 7'
  * @return an array of managers with associative arrays
  */
  public function find_all_managers($limits = '') {
    $sql = "SELECT U.*, A.* 
     FROM Users U 
    JOIN Address A 
    ON U.addressId=A.addressId 
    WHERE U.role='manager' " . $limits;
    // run the query 
    $result = $this->query($query);
    $managers = mysqli_fetch_all($result, MYSQLI_ASSOC);
    return $managers;
  }

拥有该参数是否安全?有人告诉我这个方法很容易被SQL注入,但是如果我愿意,我没有看到另一种限制查询的方法。 例如,我可能想要$db->find_all_managers(' WHERE A.lastName='smith')

1 个答案:

答案 0 :(得分:-2)

这样做

public function find_all_managers($limitA = 0,$limitB = 0) {
     //now create the limit part here, if real numbers given
     //if(is_numeric($limitA) and $limitA > 0)  
}

所以知道你创造了限制,没有别的东西可以注入。