php mysql PDO的使用 in參數拼接及limit分頁查詢失敗問題修改

 1、根據傳過來的in的數組生成預處理佔位符

2、拼接普通參數與in參數的處理條件

3、設置數據類型,支持分頁查詢

function get_select(){

    $params  = [':foo'=>'AAA',':bar'=>'bra',':pos'=>0,':lim'=>10];
    $ids = [1,2,3,4,5];

    $in = [];
    $in_params =[];

    //循環in拼接的數據
    foreach ($ids as $i=>$y){

        $key = ":id".$i;
        $in[] = $key;
        $in_params[$key] = $y;
    }

    //生成後類似 :id0,:id1,:id2,:id3,:id4 的數據
    $in = implode(',',$in);

    //合併數組參數合併後類似得到
    /*
    Array(
        [:name] => AAA
        [:bar] => bra
        [:id0] => 1
        [:id1] => 2
        [:id2] => 3
        [:id3] => 4
        [:id4] => 5
    )
     */
    $map = array_merge($params,$in_params);

    $sql = "select * from `table` where `name` = :foo and bar = :bar and id in (".$in.") limit :pos,:lim";
    $sth = $db->prepare($sql);

    foreach ($map as $key => $value) {
        $sth->bindValue($key, $value, select_data_type($value));
    }
    $sth->execute();
    $list = $sth->fetchAll(PDO::FETCH_ASSOC);

    return $list;
}

//修改數據類型用於execute limit查詢bug
function select_data_type($val)
{
    if (is_bool($val)) {
        return PDO::PARAM_BOOL;
    } elseif (is_int($val)) {
        return PDO::PARAM_INT;
    } elseif (is_null($val)) {
        return PDO::PARAM_NULL;
    } else {
        return PDO::PARAM_STR;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章