You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL JOIN语句在PHPMyAdmin正常,PDO中却报id列歧义

问题

在MySQL/PHPMyAdmin中执行以下SQL语句可正常运行:

SELECT longitude,latitude FROM event JOIN location ON event.locationId=location.id WHERE event.id=1234

但在PHP 8.1的PDO中使用带命名参数的语句执行时,却出现歧义报错:

SELECT longitude,latitude FROM event JOIN location ON event.locationId=location.id WHERE event.id=:event-id
$stmt->execute([':event-id' => 1234]);

报错信息:

Select failed: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous

明明已经给id指定了表前缀event.,为什么还会报列歧义的错误?

原因及解决办法

问题根源是PDO命名参数不支持连字符。当你写:event-id时,MySQL会错误地将其解析为event - id(即event表的列减去id列),原本的WHERE event.id=:event-id就被曲解成了WHERE event.id = event - id,这里的id没有指定表名,自然触发了歧义报错。

解决方式很直接,修改命名参数的格式,把连字符换成下划线或者去掉:

  • 方案一:用下划线替代连字符
SELECT longitude,latitude FROM event JOIN location ON event.locationId=location.id WHERE event.id=:event_id
$stmt->execute([':event_id' => 1234]);
  • 方案二:使用驼峰式参数名
SELECT longitude,latitude FROM event JOIN location ON event.locationId=location.id WHERE event.id=:eventId
$stmt->execute([':eventId' => 1234]);

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:57:11