为什么我的查询不断返回每个人都属于同一id列?

时间:2019-06-17 18:59:34

标签: php mysql

我有一个功能;在其中,它运行一个MySQL查询来检查查看用户的ID,然后从中选择他们所在部门的ID。然后,将该department_id传递到下一个查询,该查询将返回该特定Department_id的票证列表。

涉及两个表。

ow_supportcenter_ticket:

id, author_id, category_id, department_id, subject, text, status, created, updated, requested_deletion

ow_supportcenter_department_user:

department_id, user_id

我正在使用的此功能位于页面的功能上,在该页面上,分配的用户可以查看他们可以为其他人回答的票证。在后端,管理员将它们分配给一个部门,即表department_user。当用户查看此页面时,应该返回他们的department_id,然后将该结果作为参数传递给返回票证的查询。就是这样:

    static function get_mod_list($yo){
    $tt = SupportCenterDB::table_ticket();
    $dp = SupportCenterDB::table_department();
    $d = OW::getDbo();
    return $d->queryForList("SELECT {$tt}.id, category_id, subject, requested_deletion, {$dp}.text, {$tt}.department_id, updated, status FROM {$tt}
    JOIN {$dp} ON {$tt}.department_id = '{$dp}.text'
    WHERE department_id = '".$d->escapeString($yo)."'
    ORDER BY updated DESC;");
}

这是$ yo的来源:

    static function get_department_by_user($id){
    $d=OW::getDbo();
    $res = $d->query("SELECT department_id FROM ".SupportCenterDB::table_department_user()." WHERE user_id ='".$d->escapeString($id)."';");
    return $res;

}

但是,对我来说出现了两个问题。最大的问题是:每个用户,无论分配了谁的Department_id,都将作为Department_id = 1返回。当我在phpMyAdmin中运行查询时,它将按原样返回数据。当我通过网站端运行它时,无论用户分配了什么ID,它都会为每个用户返回department_id = 1。其次:即使使用Department_id 1(它是现有部门),也不会退回票证。

1 个答案:

答案 0 :(得分:0)

如果您将Department_id始终设为1,我想$ yo是1或true。

当我查看您的第二个功能时: 您确定查询返回整数(标量)而不是行数组吗? 在某些框架中,您必须添加-> scalar()或-> one()来仅查询一行并仅返回该字段。

我认为您的函数返回一个数组,当您将其传递给第一个函数时,由于该数组不为空,因此将其视为true。

一个例子是:

static function getDepartmentByUser($user_id) {
  return OW::getDbo()
    ->query("SELECT department_id FROM " . SupportCenterDB::table_department_user() . " WHERE user_id ='".$d->escapeString($id)."';")
    ->scalar();
}

出于安全原因,您也应该绑定数据,示例可能因框架而异:

static function getDepartmentByUser($user_id) {
      return OW::getDbo()
        ->query('SELECT department_id FROM :table WHERE user_id = :user_id')
        ->bind(':table', SupportCenterDB::table_department_user())
        ->bind(':user_id', $user_id)
        ->scalar();
}