PDO: Invalid parameter number: mixed named and positional parameters

Change

LIMIT :offset, :limit

to

LIMIT ?, ?

and

$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);

to:

$stmt->bindValue($index+1, $offset, PDO::PARAM_INT);
$stmt->bindValue($index+2, $limit, PDO::PARAM_INT);

in your where_string you use ? that is a positional parameter and in your limit and offset you use : that is a named parameter that is causing the warning don't mix them