$stmt->fetch()在循環中運行會用最后while()一條記錄替換以前收集的所有數據object,即使您將其推送到循環中的數組也是如此。我有一個簡單的數據庫,名為dbemployee我編寫了一個小腳本來讓所有員工都超過特定年齡。這是我的代碼:<?php$conn = mysqli_connect("localhost", "root", "", "test");if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}$output = new stdClass();$employee = new stdClass();// $ageCheck = $_POST['ageCheck'];$ageCheck = 18;$sql = "SELECT ID, vemail, vname, vage FROM dbemployee WHERE vage > ?";$stmt = $conn->stmt_init();if ($stmt->prepare($sql)) { $stmt->bind_param("s",$ageCheck); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($ID, $vemail, $vname, $vage); if ($stmt->num_rows > 0) { while ($stmt->fetch()) { $employee->ID = $ID; $employee->vemail = $vemail; $employee->vname = $vname; $employee->vage = $vage; $output->data[] = $employee; } } else { $output->data = ""; } $output->response = "SUCCESS";}header('Content-Type: application/json');print_r($output);?>令人驚訝的是,我得到的只是最后結果的 5 個條目,就好像最后結果正在替換以前的結果一樣。
1 回答

呼如林
TA貢獻1798條經驗 獲得超3個贊
您需要在循環內創建一個實例,否則它將指向相同的內存地址:
while ($stmt->fetch()) { $employee = new stdClass; $employee->ID = $ID; ...
您可以在文檔中檢查這一點(https://www.php.net/manual/en/language.oop5.basic.php):
將已創建的類實例分配給新變量時,新變量將訪問與分配的對象相同的實例。將實例傳遞給函數時,此行為是相同的。可以通過克隆來制作已創建對象的副本。
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報
0/150
提交
取消