Het probleem is dat u een verwijzing naar $tempArray in $arr invoegt. Dan verander je de referentie. Bij de derde lus heb je 3 verwijzingen naar dezelfde array. Dat is de reden waarom de waarden zo worden weergegeven... je kunt dit op een nogal niet-intuïtieve manier oplossen.
probeer:
$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);
}