簡體   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