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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:27:09