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;
}
}