Hace unos dias me tope con este error al instalar php 7.2 count() parameter must be an array or an object that implements countable php 7 y quiero compartirles una solucion, que investigando llegue a esta.
me salia ese error porque tenia una funcion que me retornaba de esta forma
public static function verificarUsuarioModel($datos,$tabla){
$query = Conexion::conectar()->prepare("SELECT id_usuario,dni,nombres,apellidos,num_tel,id_rol,username,CONCAT(nombres,' ',apellidos) AS fullname
FROM $tabla
$datos AND borrado = '0' ");
$query -> execute();
return $query -> fetch(); //esto era lo que retornaba
$query -> close();
}
y al llamar esa funcion en mi controlador de esta forma
$datos = $where = sprintf("WHERE CONCAT(nombres,' ',apellidos) = '%s' ",$fullname);
$respuesta = Usuario::verificarUsuarioModel($datos,"usuario");
la estaba verificando asi
if(count($respuesta["nombres"]) > 0){
return true;
}
Lo que me generaba el error, ya que en php7.2 no lo reconoce como array y para evitar el error mencionado hice esto
if(!empty($respuesta["nombres"])){
//procesar datos
}else{/*no tiene datos*/}
utilice esto !empty() por que por teoria al procesar la consulta retorna vacio o con datos, por eso verifique si $respuesta["nombres"]
retornaba vacio o con algun dato, ademas que apartir de la version 7.2 de php hacia adelante count()
no reconoce a return $query -> fetch();
como un array pero si enviamos de esta forma return $query -> fetchAll();
para el count()
si es correcto porque retorna un array de datos entonces solo utilizar count()
cuando retornamos con fetchAll()
, espero les sirva de mucho