$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 关注
- 101 浏览
添加回答
举报
0/150
提交
取消