繁体   English   中英

如何使用PDO删除多个表中的行

[英]How to delete rows in multiple tables using pdo

我正在尝试使用pdo INNER JOIN删除products_TABLE中的类别及其所属的产品。 如果我只删除类别而不删除产品,那么它会起作用。 这是我的代码:

$catid = filterString($_GET['cat_id']);
$stmt = $pdo->prepare('DELETE FROM categories AS c
                        INNER JOIN products AS p ON c.cat_id = p.catid
                        WHERE cat_id = :cat_id
                        ');
$delete = $stmt->execute(array('cat_id' =>$catid));

这是我遇到的错误:

致命错误:未捕获的PDOException:SQLSTATE [HY093]:无效的参数编号:在D:\\ wamp \\ www \\ p \\ employees \\ DelStore.php:25中未定义参数:堆栈跟踪:#0 D:\\ wamp \\ www \\ p \\ employee \\ DelStore.php(25):PDOStatement-> execute(Array)

在第2行的D:\\ wamp \\ www \\ p \\ employees \\ DelStore.php中抛出1个{main}

我理解它说给定参数无效,但是无法解决如何在以下情况中给定参数:

$delete = $stmt->execute(array('cat_id' =>$catid));

感谢您的任何建议

您收到的错误是因为您有:products.catid将此更改为products.catid

另外,如果要从两个表中删除条目,则应使用别名。

DELETE c,p FROM categories c
INNER JOIN products p ON c.cat_id = p.catid
WHERE cat_id = :cat_id

你也需要改变

$delete = $stmt->execute(array('cat_id' =>$catid));

$delete = $stmt->execute(array(':cat_id' =>$catid));

如果您使用的是SQL Server,则上面的示例不起作用。 在这种情况下,您应该使用2个单独的删除查询。

同样,当您在execute函数中将参数绑定为数组时,thay也会被绑定为字符串。 根据您的数据库结构,这也可能会导致一些问题。 使用$stmt->bindParam()通常是一个更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM