2016-08-31 2 views
0

я запускаю это SQL заявление, чтобы удалить из базы данных с помощью внутреннего соединения, но я получаю слишком много ошибокSql удалить, используя внутреннее соединение более 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); 
    } 

    }?> 

Я уверен, что мой контроллер дб это нормально, потому что, когда я запускаю одну ВЕЬЕТЕ это приста 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

Я получил эту ошибку 'Fatal error: Uncaught exception 'PDOException' с сообщением 'SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец« pb.BID »в разделе« on »в C: \ xampp \ htdocs \ codejail.net \ _inc \ dbcontroller.php: 57 Трассировка стека: # 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} брошен в C: \ xampp \ htdocs \ codejail.net \ _inc \ dbcontroller.php в строке 57' – Alex

+0

Упс! Опечатка. 'pb' =>' bp'. Просто исправил это. Повторите попытку, пожалуйста. – Asaph

+1

он работал очень хорошо и удален – Alex

0

После 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"); 
+0

нет ошибок, но таблица не удаляла @ Andrej Ludinovskov – Alex

Смежные вопросы