PHP7.2 에러 좀 봐주세요.
본문
G5 스킨 수정중에 아래와 같은 에러 메세지가 뜹니다.
Warning: count(): Parameter must be an array or an object that implements Countable in /www_root/theme/simple_theme/skin/board/search/skin.lib.php on line 33
PHP7.2 버전에서 체크하는 오류인 것 같은데요. 아래 소스를 어떻게 수정해 주어야 할까요?
해당파일 (skin.lib.php) 의 33라인 이후 내용은 아래와 같습니다.
....................... (33라인 )...........................
if(count($search_arr['name']) > 0){
$se_flag = 0;
for($j = 0; $j < count($search_arr['name']); $j++){
if(is_array($search_arr['val'][$j])){
$str2 = "";
for($x = 0; $x < count($search_arr['val'][$j]);$x++){
$str2 = append_sql2($str2, " or ", " {$search_arr['name'][$j]} like '%{$search_arr['val'][$j][$x]}%' ");
}
$str2 = " (".$str2.") ";
$str = append_sql2($str, " and", $str2);
}else if(strlen($search_arr['val'][$j]) > 0 && $search_arr['val'][$j] ){
$str = append_sql2($str, " and ", " {$search_arr['name'][$j]} like '%{$search_arr['val'][$j]}%' ");
}
}
}
답변 2
if (count($search_arr['name']) > 0) {
를
$cnt = is_array($search_arr['name']) ? count($search_arr['name']) : 0;
if($cnt > 0){
.
.
.
if (count($search_arr['name']) > 0) {
$str = '';
$params = [];
$se_flag = 0;
for ($j = 0; $j < count($search_arr['name']); $j++) {
$field = $search_arr['name'][$j];
$value = $search_arr['val'][$j];
if (is_array($value)) {
$subConditions = [];
foreach ($value as $subValue) {
if (trim($subValue) !== '') {
$subConditions[] = "{$field} LIKE ?";
$params[] = "%{$subValue}%";
}
}
if (count($subConditions) > 0) {
$str .= '(' . implode(' OR ', $subConditions) . ') AND ';
}
} else if (trim($value) !== '') {
$str .= "{$field} LIKE ? AND ";
$params[] = "%{$value}%";
}
}
if (!empty($str)) {
$str = substr($str, 0, -5); // remove trailing 'AND'
$where = "WHERE {$str}";
} else {
$where = '';
}
} else {
$where = '';
}
// Example query using the generated WHERE clause and the bound parameters
$sql = "SELECT * FROM my_table {$where}";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);