首页 > 解决方案 > 有没有其他方法可以从多个表中删除行而不在表之间创建外键?

问题描述

此代码不起作用。在不创建表之间的外键的情况下,如何从多个匹配条件的表中删除数据?如何编写 2 查询并使用 PHP-PDO 发送

$query = "DELETE FROM category, bookmark WHERE (bookmark.category = ? AND category.name = ?)";
$stmt = $db->prepare($query);
$stmt->execute([$categoryName, $categoryName]);

我在用 ”?” 防止sql注入。这是我得到的错误。

JavaSQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE (bookmark.category = 'Java' AND category.name = 'Java')' 附近使用正确的语法

标签: phpmysqldatabasepdo

解决方案


在多表 DELETE 中,您必须指定必须删除哪些记录的表:

DELETE category, bookmark
FROM category, bookmark 
WHERE (bookmark.category = ? AND category.name = ?)

请参阅MySQL 8.0 参考手册 / ... / DELETE 语句,“多表语法”部分。必须删除记录的表的名称包含在方括号中作为可选(两种语法变体中的第二行查询文本)。


推荐阅读