PhP $stmt->fetch() while 循环不断替换现有数据

$stmt->fetch()在循环中运行会用最后while()一条记录替换以前收集的所有数据object,即使您将其推送到循环中的数组也是如此。

我有一个简单的数据库,名为dbemployee

https://img.mukewang.com/64fae1e00001656c03190166.jpg

我编写了一个小脚本来让所有员工都超过特定年龄。


这是我的代码:


<?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 个条目,就好像最后结果正在替换以前的结果一样。

https://img4.mukewang.com/64fae1ed00018b8403180630.jpg

慕标5832272
浏览 108回答 1
1回答

呼如林

您需要在循环内创建一个实例,否则它将指向相同的内存地址:while&nbsp;($stmt->fetch())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$employee&nbsp;=&nbsp;new&nbsp;stdClass; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$employee->ID&nbsp;=&nbsp;$ID; &nbsp;&nbsp;&nbsp;...您可以在文档中检查这一点(https://www.php.net/manual/en/language.oop5.basic.php):将已创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。将实例传递给函数时,此行为是相同的。可以通过克隆来制作已创建对象的副本。
打开App,查看更多内容
随时随地看视频慕课网APP