2013-02-08 67 views
0

我在mysql中有两个表是“users”和“users_info” - 第一个表包含登录数据,例如电子邮件和密码以及名称。在多个表上更新

,并包含更多的信息,如地址,出生日期,生物第二个表等

现在,我工作的管理面板中,我可以修改关于这些用户的任何信息。为了获得数据,我正在使用一个连接,但保存怎么办?

不管表格如何保存数据?如果它只是一个表我会做(在PHP):

$values = Array(
    "email" => "[email protected]", //this goes into "users" 
    "name" => "john", //this one, too 
    "bio" => "i is cool" //this one should to go users_info!! 
); 

foreach($values as $k=>$v) { 
    $query = " UPDATE users SET '$k'='$v' WHERE id=7653 "; 
} 

,因为“生物”是不是里面users_info列,这将给出一个错误。有任何想法吗?

在此先感谢。

回答

0
$table = "users"; 
foreach($values as $k=>$v) { 
if($values = "bio"{ 
$table = "users_info"; 
} 
$query = "UPDATE '$table' set '$k'='$v' WHERE id = 7653"; 
$table = "users"; 
} 
+0

居然忘了提。我知道我可以做到这一点,但是,有没有办法在一个查询中做到这一点? – 2013-02-08 13:02:07

+0

$ table =“users”; ($ values =“bio”{table =“users_info”; } $ query =“UPDATE”$ table'set'$ k'= $ foreach($ values as $ k => $ v) '$ v'WHERE id = 7653“; $ table =”users“; } – 2013-02-08 13:08:15

1
编码

你的方式是有点模糊但是你可以尝试做如下图所示,现在,

$usersColumns = array('email','password',...); 
$usersInfoColumns = array('address','dob',...); 
foreach($values as $k=>$v) { 
    if(in_array($k,$usersColumns)){ 
    $tableName = 'users'; 
    } 
    else if(in_array($k,$usersInfoColumns)){ 
    $tableName = 'users_info';  
    } 
    $query = "UPDATE $tableName SET '$k'='$v' WHERE id=7653"; 
} 
0

当然你可以使用multiple-table syntax

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 

但是,如果我是你,我不会在意,我只是运行两个定期单桌更新。发生错误会很容易(并更新意外记录),并且您没有获得任何明显的好处。

0

我从来不建议在循环中查询。我认为你需要先分开你的帖子值;

<form method="post"> 
    <input type="text" name="user[name]"> 
    <input type="text" name="user[email]"> 
    <textarea name="user_info[bio]"></textarea> 
</form> 

和PHP部分;

$user_post  = (array) $_POST['user']; 
$user_info_post = (array) $_POST['user_info']; 
$user_query = $user_info_query = array(); 
foreach ($user_post as $k => $v) { 
    // db_escape is your data security 
    $user_query[] = sprintf("`%s` = '%s'", $k, db_escape($v)); 
} 
if (!empty($user_query)) { 
    $user_query = join(', ', $user_query); 
    // db_query("UPDATE users SET ..."); 
} 
if (!empty($user_info_query)) { 
    $user_info_query = join(', ', $user_info_query); 
    // db_query("UPDATE users_info SET ..."); 
}