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

我的我的左联接在 PHP 页面中首先返回错误,但在 MYSQL 命令行中返回正确的结果

我的我的左联接在 PHP 页面中首先返回错误,但在 MYSQL 命令行中返回正确的结果

PHP
慕哥6287543 2022-09-12 09:13:29
我们在主MySQL表(命名对象)中添加了两列,一列表示数量,一列表示单位ID。如果数量和/或单位未知,则这些列设置为 NULL。我们希望将此表与单位类型表联接在一起,以显示单位的名称(磅、页、克等)。当我在MYSQL的命令行客户端中运行选择时,它返回预期的结果。当我的 PHP 页面运行查询时,第一行显示来自联接错误端的值。示例:要连接的表是具有这些定义的对象和单位类型mysql> show create table objects;CREATE TABLE `objects` (  `objId` int NOT NULL AUTO_INCREMENT,  `name` varchar(100) DEFAULT NULL,  `description` varchar(250) DEFAULT NULL,  `quantity` int DEFAULT NULL,  `unitid` int DEFAULT NULL,  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  `modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (`objId`),  KEY `unitid` (`unitid`),  CONSTRAINT `objects_ibfk_1` FOREIGN KEY (`unitid`) REFERENCES `unittypes` (`unitId`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=4735 DEFAULT CHARSET=utf8和:mysql> show create table unittypes;CREATE TABLE `unittypes` (  `unitId` int NOT NULL AUTO_INCREMENT,  `name` varchar(50) DEFAULT NULL,  `description` varchar(50) DEFAULT NULL,  `create_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,  `modify_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (`unitId`),  UNIQUE KEY `name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8示例行:Unittypes:+--------+------+--------------+-| unitId | name | description  | +--------+------+--------------+-|      1 | Each | Each         | Objects:+-------+---------------------------------------+-------------+----------+--------+| objId | NAME                                  | description | quantity | unitid | +-------+---------------------------------------+-------------+----------+--------+|  1018 | UNKNOWN cables                        | NULL        |   NULL   |  NULL  |  |  3466 | UNKNOWN replies                       | NULL        |   NULL   |  NULL  | 结果集有 3 行。单位类型没有匹配行时的示例:我使用连接语法得到相同的结果左连接单元类型 u on o.unitid = u.单元 id我希望相同的查询在两个示例中的行为方式相同。我本来会猜测命令行和PHP只是将字符串传递给mySQL进行处理,但显然我没有看到一些差异。PHP如何传递查询有什么奇怪的事情吗?MYsql是否无法正确处理通过该接口的连接;代码是否错误(无需连接即可工作)?
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

您有两个名为 的列。第二个将覆盖第一个。name

您应将它们别名为具有不同的名称。select `o`.`name` as `o_name` ...

在你的情况下,只有第一行受到影响的原因是因为你用来获取它,但随后又得到其他行(并且有效,因为它完全忽略了列名)fetch_assocfetch_rowfetch_row


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 61 浏览

添加回答

举报

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