首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP7.4中mysqli_stmt::bind_result行为的变化

PHP7.4中mysqli_stmt::bind_result行为的变化
EN

Stack Overflow用户
提问于 2021-01-05 08:49:42
回答 1查看 85关注 0票数 3

我不知道这是否是问这个问题的合适地方,但我认为这个网站的专家可能会给我一个有价值的答案。

最近,我从PHP-7.3升级到PHP-7.4,注意到了一种我没想到的行为。下面的数据库和脚本是演示我的问题的最小示例:

代码语言:javascript
复制
CREATE TABLE `user` (
  `idUser` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`idUser`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `user` VALUES (1,'Alice'),(2,'Eve'),(3,'Bob'),(4,'Rick');

CREATE TABLE `user_data` (
  `idUserData` int(11) NOT NULL AUTO_INCREMENT,
  `idUser` int(11) NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY (`idUserData`),
  KEY `idUser` (`idUser`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `user_data` VALUES (1,1,'likes to read'),(2,3,'plays in a band');
代码语言:javascript
复制
<?php
$mysqli = new mysqli (HOST, USER, PASSWORD, DATABASE);

$stmt = $mysqli->prepare('SELECT idUser, name FROM user');
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($idUser, $name);

while ($stmt->fetch())
{
    $stmt2 = $mysqli->prepare('SELECT data FROM user_data WHERE idUser = ?');
    $stmt2->bind_param('i', $idUser);
    $stmt2->execute();
    $stmt2->store_result();
    $stmt2->bind_result($data);
    $stmt2->fetch();

    print $name . ' => ' . $data . '<br>';
}
?>

PHP-7.3提供了以下输出:

代码语言:javascript
复制
Alice =>  likes to read
Eve =>
Bob =>  plays in a band
Rick =>

在PHP-7.4中,我得到了以下输出:

代码语言:javascript
复制
Alice =>  likes to read
Eve =>  likes to read
Bob =>  plays in a band
Rick =>  plays in a band

while循环中的bind_result()fetch()不清除空$data结果集上的$data。它仍然包含上一次迭代中的旧值。在PHP-7.3和较小版本中,var被清除。

那么,这是故意的行为,还是我偶然发现了一个bug?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-07 21:27:04

我猜是对的。是个虫子。

我为这个问题创建了一个bug报告,它被验证为一个回归:https://bugs.php.net/bug.php?id=80604

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65575668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档