亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PhP $stmt->fetch() while 循環不斷替換現有數據

PhP $stmt->fetch() while 循環不斷替換現有數據

PHP
慕標5832272 2023-09-08 16:56:25
$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):

將已創建的類實例分配給新變量時,新變量將訪問與分配的對象相同的實例。將實例傳遞給函數時,此行為是相同的。可以通過克隆來制作已創建對象的副本。


查看完整回答
反對 回復 2023-09-08
  • 1 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號