2017-04-05 53 views
-1

我已經嘗試了很多我在stackoverflow上找到的解決方案,但在嘗試在一個語句內更新我的表時仍然收到相同的錯誤。PHP在一個語句中更新多個表錯誤

錯誤:

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 'WHERE docID=7' at line 2

代碼:

<?php 

    if(isset($_POST['btn-revActivate'])) 
    { 
     try 
    { 
     $database = new Database(); 
     $db = $database->dbConnection(); 
     $conn = $db; 


    $stmt=$conn->prepare("UPDATE tbl_revisions, tbl_documents SET revStatus='Active', docStatus='Draft' 
       WHERE revID=$rid AND docID=$docID "); 
    $stmt->bindparam("revStatus",$revStatus); 
    $stmt->bindparam(":id",$rid); 
    $stmt->bindparam("docStatus",$docStatus); 
    $stmt->bindparam(":docID",$docID); 
    $stmt->execute(); 
    return true; 

    } 
    catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    return false; 
    } 
    } 

    ?> 

能有人幫,因爲我不知道什麼是錯的這種說法。 謝謝。

+3

你沒有正確使用預處理語句(一件事)。 –

+0

@ Fred-ii-它可以很好地工作,但不會更新多個表。 – bigjoed

+0

我不明白該查詢如何生成該錯誤。兩者之間的WHERE條款是不同的。還要注意,你的代碼是開放給SQL注入的,所以我猜錯誤中的WHERE子句可能來自用戶輸入。 – David

回答

1

你不能在一個語句中更新多個表。如果你想更新,那麼你可以使用一個事務來確保兩個UPDATE語句被原子處理。

BEGIN TRANSACTION; 

UPDATE tbl_revisions 

SET revStatus='Active', docStatus='Draft' 
       WHERE revID=$rid AND docID=$docID '; 

UPDATE tbl_documents 
SET revStatus='Active', docStatus='Draft' 
       WHERE revID=$rid AND docID=$docID '; 

COMMIT; 

瞭解更多信息

https://dev.mysql.com/doc/refman/5.7/en/commit.html