Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的查询总是返回属于同一id列的所有人?_Php_Mysql - Fatal编程技术网

Php 为什么我的查询总是返回属于同一id列的所有人?

Php 为什么我的查询总是返回属于同一id列的所有人?,php,mysql,Php,Mysql,我有一个功能;在其中,它运行一个MySQL查询来检查查看用户的id,然后从中选择他们所在部门的id。然后,该部门id将被传递到下一个查询中,该查询返回该特定部门id的票证列表 涉及两张桌子 ow_Support Center_票证: id, author_id, category_id, department_id, subject, text, status, created, updated, requested_deletion ow_支持中心\部门\用户: department_id,

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

涉及两张桌子

ow_Support Center_票证:

id, author_id, category_id, department_id, subject, text, status, created, updated, requested_deletion
ow_支持中心\部门\用户:

department_id, user_id
我正在使用的这个函数是一个页面上的函数,在这个页面上,指定的用户可以查看他们可以为其他人解答的问题。在后端,管理员将它们分配给一个部门,即表department\u用户。当用户查看此页面时,应该返回他们的部门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;

}

然而,我遇到了两个问题。最大的一个:每个用户,无论其分配的部门id如何,都会返回为部门id=1。当我在phpMyAdmin中运行查询时,它会按原样返回数据。当我通过website end运行它时,它会为每个用户返回department_id=1,而不管他们分配了什么id。第二:即使是department_id 1,这是一个现有的部门,票仍然不会被返回。

如果你总是将department_id设置为1,我认为$yo要么是1,要么是真的

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

我认为您的函数返回一个数组,当您将它传递给第一个函数时,它将其视为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();
}

谢谢你的回复。我尝试将->scalar()应用于查询,这返回了一个错误,帮助我确认我的查询已作为整数返回。在框架中使用开发人员工具向我展示了查询返回的方式。例如,在第二个查询中,user_id=#,Admin(其id=1)返回1,等等,但输出不在那里。Oxwall CMS软件警告:您可能对参数化预处理语句持开放态度,并且应该真正使用参数化预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何类型的输入,尤其是来自客户端的输入。即使您的查询仅由受信任的用户执行。