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