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