我在php中创建了个人资料页面。该页面包含地址和电话字段,并提示用户插入其数据。然后将数据保存在名为profile的表中。 一切正常,但问题是表只有在包含已经数据时才更新。我怎样才能修改它(可能是我在函数中的mysql查询),这样数据就会输入到表中,即使它是空的。有没有像我可以使用的UPDATE OR INSERT INTO语法? 感谢
<?php
if ( isset($_GET['success']) === true && empty($_GET['success'])===true ){
echo'profile updated sucessfuly';
}else{
if( empty($_POST) === false && empty($errors) === true ){
$update_data_profile = array(
'address' => $_POST['address'],
'telephone' => $_POST['telephone'],
);
update_user_profile($session_user_id, $update_data_profile);
header('Location: profile_update.php?success');
exit();
}else if ( empty($errors) === false ){
echo output_errors($errors);
}
?>
然后使用以下函数
function update_user_profile($user_id, $update_data_profile){
$update = array();
array_walk($update_data_profile, 'array_sanitize');
foreach($update_data_profile as $field => $data )
{
$update[]='`' . $field . '` = \'' . $data . '\'';
}
mysql_query(" UPDATE `profile` SET " . implode(', ', $update) . " WHERE `user_id` = $user_id ") or die(mysql_error());
}
答案 0 :(得分:1)
我对psu发布的答案不熟悉,并且肯定会检查一下,但是从快速阅读中,你需要在使用这些特殊语法时非常小心。
我想到了一个原因:您不知道您正在插入或更新信息的表格中可能发生的事情。如果定义了多个唯一身份用户,那么您可能会遇到严重问题,这在扩展应用程序时很常见。2替换为语法是我很少希望在我的应用程序中发生的功能。因为我不想从表中已经存在的行中的colomns中丢失数据。
我并不是说他的答案是错的,只是说明在使用它时需要采取预防措施,因为上述原因和可能的原因。
如第一篇文章中所述,我可能是这样做的新手,但在此刻我更喜欢:
$result = mysql_query("select user_id from profile where user_id = $user_id limit 1");
if(mysql_num_rows($result) === 1){
//do update like you did
}
else{
/**
* this next line is added after my comment,
* you can now also leave the if(count()) part out, since the array will now alwayss
* hold data and the query won't get invalid because of an empty array
**/
$update_data_profile['user_id'] = $user_id;
if(count($update_data_profile)){
$columns = array();
$values = array();
foreach($update_data_profile as $field => $data){
$columns[] = $field;
$values[] = $data;
}
$sql = "insert into profile (" . implode(",", $columns) .") values ('" . implode("','", $values) . "')" ;
var_dump($sql); //remove this line, this was only to show what the code was doing
/**update**/
mysql_query($sql) or echo mysql_error();
}
}
答案 1 :(得分:0)
如果表中没有与user_id相对应的数据,则无法更新表,这意味着您必须有一行包含user_id和null或其他字段的其他内容。
a)您可以尝试检查表中是否包含数据,如果不包含数据,则使用更新(不理想)
$result = mysql_query("UPDATE ...");
if (mysql_affected_rows() == 0)
$result = mysql_query("INSERT ...");
b)查看此链接
http://www.kavoir.com/2009/05/mysql-insert-if-doesnt-exist-otherwise-update-the-existing-row.html
http://dev.mysql.com/doc/refman/5.0/en/replace.html
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
答案 2 :(得分:0)
@Stefanos
您可以使用“REPLACE INTO”命令代替SQL查询中的“INSERT INTO”。
例如
假设您有插入查询
INSERT INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');
现在您可以使用以下查询作为插入和更新的组合
REPLACE INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');
希望这会有所帮助!