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

时间:2018-05-23 11:38:05

标签: php mysqli

我正在尝试使用pdo INNER JOIN删除products_TABLE中属于它的类别和产品。 如果我只删除类别而不删除产品,它是有效的。 这是我的代码:

get pods

这是我遇到的错误:

  

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

     在第2行的D:\ wamp \ www \ p \ employees \ DelStore.php中抛出

1 {main}

我理解它说给定参数无效,但无法解决如何给出参数:

$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));

感谢您的任何建议

1 个答案:

答案 0 :(得分:2)

您收到的错误是因为您有: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函数中的参数绑定为数组时,它们会绑定为stings。根据您的数据库结构,这可能也会导致一些问题。使用$stmt->bindParam()通常是更好的选择。