[英]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.