我正在尝试使用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));
感谢您的任何建议
答案 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()
通常是更好的选择。