2012-07-08 49 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