2012-07-08 90 views
0

我有兩個表,一個名爲admin,另一個名爲Permission。PHP同時更新兩個表

  • 聯繫表有用戶列表具有以下信息(ID, 用戶名,密碼)
  • 權限表具有以下信息(USER_ID,PERMISSION_NAME, 用戶)

當我編輯用戶i在同一頁面上顯示所有信息,包括權限。

當我點擊編輯,我可以更新信息,但因爲如果一個表得到更新,我收到錯誤消息,即使表已經成功更新。

$sql = " UPDATE admin SET username='test', password='test' WHERE id=1;"; 
$result = mysql_query($sql, $connection); 

if(mysql_affected_rows($result) == 1) 
{ 
    $sql = " UPDATE permission SET permission_name ='add_user', user='admin' WHERE user_id=1;"; 
    $result = mysql_query($sql, $connection); 
    echo 'successfully'; 
} 

else 
{ 
    echo 'some error'; 
} 

當我只是想改變用戶的權限它確實給我錯誤,因爲我沒有改變任何東西。但如果我更改管理表,一切正常。

如果成功更新了其中一個或兩個,我該如何顯示成功的消息。

回答

5

您可以將兩個表結合在一起,同時更新他們:

UPDATE admin a 
INNER JOIN permission b ON a.id = b.user_id 
SET 
    a.username = 'test', 
    a.password = 'test', 
    b.permission_name = 'add_user', 
    b.user = 'admin' 
WHERE a.id = 1 
+0

這將是細做,或者以後會造成更大的問題上 – user1509201 2012-07-08 22:45:33

+0

爲什麼要呢?查看[官方文檔](http://dev.mysql.com/doc/refman/5.5/en/update.html),它描述了這種技術(如多表更新)。 – raina77ow 2012-07-08 22:50:19

+0

謝謝我將通讀 – user1509201 2012-07-08 22:51:41

0
<?php 

$success = true; 

$sql = " UPDATE admin SET username='test', password='test' WHERE id=1;"; 
$result = mysql_query($sql, $connection); 

if(!mysql_affected_rows($result)) 
    $success = false; 

$sql = " UPDATE permission SET permission_name ='add_user', user='admin' WHERE user_id=1;"; 
$result = mysql_query($sql, $connection); 

if(!mysql_affected_rows($result)) 
    $success = false; 

echo ($success ? 'Success' : 'Error'); 
+0

我試過這個,但因爲我正在運行一些檢查錯誤就像用戶名是字符串只。因爲權限將更新我不會看到錯誤告訴我,用戶名是不正確的格式。 – user1509201 2012-07-08 22:46:44

0

贊恩邊的回答是你在這種情況下,最好的選擇,但是對於情況下,你不能只是結合查詢您應該檢查(!$result)而不是(mysql_affected_rows($result) == 1),因爲您正在嘗試檢查是否發生錯誤(這將導致mysql_query返回false),而不是表中是否實際更新了任何行。

0

如何存儲的過程:

DELIMITER $$ 
CREATED PROCEDURE DoUpdate(TheID INT, TheUser VARCHAR(255), ThePassword VARCHAR(255), ThePermission VARCHAR(255), ThePermissionUser VARCHAR(255)) 
BEGIN 

    UPDATE admin 
    SET username= TheUser 
     , password= ThePassword 
    WHERE id = TheID; 

    IF ROW_COUNT() = 1 THEN 
     UPDATE permission 
     SET permission_name = ThePermission 
      , user = ThePermissionUser 
     WHERE user_id = TheID; 
    END IF; 
END $$ 

然後:

CALL DoUpdate(1, 'test', 'test', 'add_user', 'admin'); 
+0

但如果我只是想刪除用戶的一些權限,那麼我仍然沒有爲管理員表任何東西,所以在這種情況下,這也不會工作。 – user1509201 2012-07-09 16:49:59