Проблемът е, че вмъквате препратка към $tempArray в $arr. След това променяте препратката. До третия цикъл имате 3 препратки към един и същ масив. Ето защо стойностите се показват по този начин... можете да разрешите това по доста неинтуитивен начин.
опитайте:
$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);
}