我有一个功能;在其中,它运行一个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(它是现有部门),也不会退回票证。
答案 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();
}