2017-04-05 10 views
-1

私はstackoverflowで見つけた多くのソリューションを試しましたが、1つのステートメント内でテーブルを更新しようとすると同じエラーが発生し続けます。PHPは1つのステートメントエラーで複数のテーブルを更新します

ERROR:

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

ため

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; 

あなたは(一つに)正しくプリペアドステートメントを使用していません。 –

+0

@ Fred-ii-それは個別にうまく動作しますが、複数のテーブルは更新されません。 – bigjoed

+0

そのクエリがそのエラーをどのように生成するのかわかりません。 'WHERE'節は2つの部分で異なります。また、あなたのコードはSQLインジェクションにオープンしているので、エラーのWHERE句はユーザーの入力から来ると思いますか? – David

答えて

1

1つの文で複数のテーブルを更新することはできません。更新する場合は、トランザクションを使用して2つのUPDATE文がアトミックに扱われるようにします。詳しくは

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

関連する問題