2016-08-31 38 views
0

我运行这个SQL语句中使用内连接从数据库中删除,但我得到了太多的错误DELETE语句使用内部连接3页以上的表

错误

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INNER JOIN ipaddress_likes_map ON ipaddress_likes_map.postat = blog_post.BID INN' at line 3' in C:\xampp\htdocs\codejail.net_inc\dbcontroller.php:57 Stack trace: #0 C:\xampp\htdocs\codejail.net_inc\dbcontroller.php(57): PDOStatement->execute() #1 C:\xampp\htdocs\codejail.net\user\deleteaccount.php(88): DBController->execute() #2 {main} thrown in C:\xampp\htdocs\codejail.net_inc\dbcontroller.php on line 57

这里是我的代码

<?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语句是我活像分贝控制器是好的k非常好

+0

的可能的复制[MySQL中删除与加入(http://stackoverflow.com/questions/652770/delete-with-join-in-mysql) –

回答

0

给每个表的别名和单词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"); 
+0

我得到了这个错误致命错误:带有消息'SQLSTATE [42S22]的未捕获的异常'PDOException':未找到列:1054在'on子句'中的未知列'pb.BID'在C:\ xampp \ htdocs \ codejail.net \ _inc \ dbcontroller.php:57 Stack trace:#0 C:\ xampp \ htdocs \ codejail.net \ _inc \ dbcontroller.php(57):PDOStatement-> execute()#1 C:\ xampp \ htdocs \ codejail.net \ user \ deleteaccount.php(88):DBController-> execute()#2 {main}在第57行抛出C:\ xampp \ htdocs \ codejail.net \ _inc \ dbcontroller.php – Alex

+0

哎呀!错字。 'pb' =>'bp'。只是修复它。请再试一次。 – Asaph

+1

它工作得很好,并删除 – Alex

0

删除后,你应该告诉从哪个表删除行。试试这个查询:

$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"); 
+0

没有错误,但该表没有删除@ Andrej Ludinovskov – Alex