PHP函数rdvDelete执行SQL删除时报错,请求排查语法问题
问题原因与修复方案
错误核心
你的SQL语句存在多表DELETE语法错误,MariaDB/MySQL不支持DELETE FROM 表1,表2 WHERE ...这种直接在FROM后罗列多表的写法。
正确写法(分两种场景)
场景1:同时删除rdvs和关联的visitors记录
如果需要同时删除预约记录(rdvs)和对应的访客记录(visitors),可以用以下两种正确语法:
写法1:DELETE后指定要删除的表,FROM子句关联表
function rdvDelete($rdv) { $pdo = connexion(); $sql = $pdo->prepare("DELETE visitors, rdvs FROM rdvs JOIN visitors ON visitors.idVisitor = rdvs.idVisitor WHERE rdvs.idRdv = :rdv"); $sql->execute(['rdv' => $rdv]); }
写法2:使用USING子句关联表
function rdvDelete($rdv) { $pdo = connexion(); $sql = $pdo->prepare("DELETE FROM visitors, rdvs USING rdvs JOIN visitors ON visitors.idVisitor = rdvs.idVisitor WHERE rdvs.idRdv = :rdv"); $sql->execute(['rdv' => $rdv]); }
场景2:仅删除rdvs表的预约记录
如果不需要删除访客记录,只需删除预约本身,语句可以简化为:
function rdvDelete($rdv) { $pdo = connexion(); $sql = $pdo->prepare("DELETE FROM rdvs WHERE idRdv = :rdv"); $sql->execute(['rdv' => $rdv]); }
错误解释
原语句中DELETE FROM visitors,rdvs WHERE ...的语法不符合MariaDB的规范,数据库无法解析这种多表删除的写法,因此抛出SQLSTATE[42000]: Syntax error or access violation: 1064错误。
内容的提问来源于stack exchange,提问作者Davidwys
相关产品推荐
相关产品推荐

