这个查询出了什么问题?

时间:2015-11-18 06:59:20

标签: php postgresql

public function get_modno_sno($id) 
{   
    $query = 'select  a.model_no,a.serial_no,a.stock_id from tra_item_stock a where a.trans_id is  NULL and a.model_no = '.$id.'
    union
    select  a.model_no,a.serial_no,a.stock_id from tra_indent_issue_details_2 a where a.flag = 3 and a.model_no ='.$id;
    $result = $this->db->query($query);
    return $result->result();
}

当我运行此查询错误时显示为:

  

栏" kb234"不存在

kb234是传递给$id

的字符变化值

2 个答案:

答案 0 :(得分:3)

您没有用引号括起kb234,因此数据库会将其标识为列名。

您可以修改代码以包含引号:

public function get_modno_sno($id) 
    {   
        $query = "select  a.model_no,a.serial_no,a.stock_id from tra_item_stock a where a.trans_id is  NULL and a.model_no = '$id'
        union
        select  a.model_no,a.serial_no,a.stock_id from tra_indent_issue_details_2 a where a.flag = 3 and a.model_no = '$id'";
        $result = $this->db->query($query);
        return $result->result();
    }

但请注意,使用字符串操作创建SQL查询是一种狡猾的做法,这会使您的代码容易受到SQL注入攻击。您应该考虑使用prepared statement

答案 1 :(得分:2)

.model_no ='.$id; 

在联合查询的末尾缺少''