我在mysql中有两个表是“users”和“users_info” - 第一个包含登录数据,例如电子邮件和密码,以及名称。
和第二个包含更多信息的表,如address,dob,bio等。
现在,我正在开发一个管理面板,我可以在其中修改有关这些用户的任何信息。要获取数据,我正在使用联接,但是保存呢?
如何保存数据而不管其表格如何?如果它只是一个表我会做(在PHP中):
$values = Array(
"email" => "foo@test.com", //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 ";
}
这会产生错误,因为“bio”不是users_info中的列。有什么想法吗?
提前致谢。
答案 0 :(得分: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";
}
答案 1 :(得分: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";
}
答案 2 :(得分:0)
您当然可以使用multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
但是,如果我是你,我不会在乎,我只需要运行两个常规单表更新。它很容易出错(并更新意外的记录)而且你没有任何明显的好处。
答案 3 :(得分: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 ...");
}