为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信