Non ho mai usato bind_param(), ma ti posso evidenziare le imprecisioni che saltano all'occhio:

Codice PHP:
<?php

$sqlQuery 
"SELECT campo1, campo2 FROM tabella Where a=? AND b=?";

/* $params[0] = 'pluto';
 * $params[0] = 'paperino';
 * Non va bene: non generi un vettore di due elementi ma
 * assegni due volte al primo elemento */
$params[] = 'pluto';
$params[] = 'paperino';

executeQuery($sqlQuery$params);

function 
executeQuery($sqlQuery$params)
{
/* try {
 * Senza il corrispettivo catch non va */

/* $count = 1;
 * $countColonna = 0;
 * $bindResultparams = '';
 * Non più usati */

$stmt $this->mysqli->stmt_init();
$stmt->prepare($sqlQuery);

/* Questo non va bene: passi a bind_param() una stringa con
 * valori separati da virgola, non argomenti diversi (come invece richiede)
 * $numParams = '';
 * $typeParams = '';
 * for ($i = 0; $i<count($params); $i++) {
 * $typeParams .= 's';
 * $numParams .= "'".$params[$i]."'";
 * if ($i != count($params)-1)
 * $numParams .= ',';
 * }
 * $func = "bind_param('$typeParams',$numParams)";
 * $stmt->$func; */
$types '';
foreach (
$params as $param) {
  if (
is_string($param)) {
    
$types .= 's';
  } elseif (
is_int($param)) {
    
$types .= 'i';
  } elseif (
is_double($param)) {
    
$types .= 'd';
  } else {
    return 
false;
  }
}
array_unshift($params$types);
call_user_func_array(array(&$stmt'bind_param'), $params);

$stmt->execute();

$stmt->store_result();

printf("Number of rows: %d.\n"$stmt->num_rows);

/* Manca la chiusura della funzione */
}

?>
Comunque, fossi in te, darei un'occhiata alle funzioni PDO (le trovi direttamente nel manuale PHP): sono molto simili a mysqli ma astraggono anche dal database server. Se devi cominciare da zero, tanto vale farlo alla grande.