Le problème est que vous insérez une référence à $tempArray dans $arr. Ensuite, vous modifiez la référence. À la troisième boucle, vous avez 3 références au même tableau. C'est pourquoi les valeurs s'affichent ainsi... vous pouvez résoudre ce problème de manière plutôt non intuitive.
essayez :
$stmt->bind_result($tempArray["val1"], $tempArray["val2"],$tempArray["val3"]);
while ( $stmt->fetch () ) {
$x = $tempArray; //This copies the values of $tempArray to $x and each loop will create a new x.
array_push($arr, $x);
}