簡體   English   中英

使用內部聯接超過3個表的SQL刪除

[英]Sql delete using inner join more than 3 tables

我運行此sql語句以使用內部聯接從數據庫中刪除,但是出現太多錯誤

錯誤

致命錯誤:消息為“ SQLSTATE [42000]”的未捕獲的異常“ PDOException”:語法錯誤或訪問沖突:1064 SQL語法有錯誤; 檢查與您的MariaDB服務器版本對應的手冊以獲取正確的語法,以在“ INNER JOIN ipaddress_likes_map ON ipaddress_likes_map.postat = blog_post.BID INN”在C:\\ xampp \\ htdocs \\ codejail.net_inc \\ dbcontroller.php的第3行使用:57堆棧跟蹤:#0 C:\\ xampp \\ htdocs \\ codejail.net_inc \\ dbcontroller.php(57):PDOStatement-> execute()#1 C:\\ xampp \\ htdocs \\ codejail.net \\ user \\ deleteaccount.php( 88):第57行上的C:\\ xampp \\ htdocs \\ codejail.net_inc \\ dbcontroller.php中拋出了DBController-> execute()#2 {main}

這是我的代碼

<?php
   if(isset($_POST['delete'])){
     $pass = $_POST['pasyske'];
     $userkey = $_POST['username'];
     $db_delete = new DBController();
     $db_delete->prepare("DELETE
FROM blog_post
INNER JOIN ipaddress_likes_map ON ipaddress_likes_map.postat = blog_post.BID
INNER JOIN flagpost ON flagpost.postId = blog_post.BID
INNER JOIN postviewmap ON postviewmap.viewpostId = blog_post.BID
INNER JOIN replys ON replys.rid = blog_post.BID
INNER JOIN votepoint_map ON votepoint_map.postlike_id = blog_post.BID
WHERE blog_post.UserName = :alluserpost");
     $db_delete->bind(":alluserpost", $userkey);
     //$db_delete->bind(":password", $encrypt_password);
     $db_delete->execute();
     $pdeleted = $db_delete->getAll(); 
     $db_delete->free();

    if($pdeleted){
        print_r($pdeleted);
    }

   }?>

我確定我的數據庫控制器是可以的,因為當我運行單個delete語句時,它可以很好地工作

刪除后,您應該告訴您從哪個表中刪除行。 試試這個查詢:

$db_delete->prepare("DELETE blog_post 
FROM blog_post
INNER JOIN ipaddress_likes_map ON ipaddress_likes_map.postat = blog_post.BID
INNER JOIN flagpost ON flagpost.postId = blog_post.BID
INNER JOIN postviewmap ON postviewmap.viewpostId = blog_post.BID
INNER JOIN replys ON replys.rid = blog_post.BID
INNER JOIN votepoint_map ON votepoint_map.postlike_id = blog_post.BID
WHERE blog_post.UserName = :alluserpost");

給每個表起一個別名,並在單詞DELETE之后立即引用它。 另外,使用LEFT JOIN而不是INNER JOIN因為我猜想如果某些聯接表沒有匹配的行,您仍然希望執行刪除操作事件。

db_delete->prepare("DELETE bp, i, f, p, r, v
FROM blog_post AS bp
LEFT JOIN ipaddress_likes_map AS i ON i.postat = bp.BID
LEFT JOIN flagpost AS f ON f.postId = bp.BID
LEFT JOIN postviewmap AS p ON p.viewpostId = bp.BID
LEFT JOIN replys AS r ON r.rid = bp.BID
LEFT JOIN votepoint_map AS v ON v.postlike_id = bp.BID
WHERE bp.UserName = :alluserpost");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM