代码之家  ›  专栏  ›  技术社区  ›  opHASnoNAME

构建SQL选择更好的方法?(甲骨文)

  •  1
  • opHASnoNAME  · 技术社区  · 14 年前

    在我的一个类中有以下代码部分:

                    $l = new Location();
                    $result = $l->getLocIdsbyCity($city); // returns csv
                    $ids = explode(',', $result);
    
                    $where = 'LOC_ID = ' . $ids[0];
                    unset($ids[0]);
    
                    foreach ($ids as $id) {
                        $where .= ' OR LOC_ID = ' . $id;
                    }
    
                    $select->where($where);
    

    有没有更“优雅”的方法来构建select stmt?我需要所有有身份证的记录。。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Quassnoi    14 年前

    假设你的 csv 注入是否安全(包含受信任的值并且没有用户提供的输入):

                $l = new Location();
                $result = $l->getLocIdsbyCity($city); // returns csv
                $where = "LOC_ID IN ($result)";
                $select->where($where);
    

    如果不是,你应该引爆它, mysql_real_escape_string 每个值和内爆。

        2
  •  0
  •   Guffa    14 年前

    你可以使用 in 运算符以形成如下条件:

    where LOC_ID in (1,2,3,4,5)
    

    如果你确定 $result 不能包含任何有害的内容,您应该可以直接使用它,而不必拆分它并循环使用。