4

我在 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());


}
4

3 回答 3

1

我是 psu 发布的答案的新手,并且肯定会对此进行检查,但是通过快速阅读,您在使用这些特殊语法时需要非常小心。

想到的 1 个原因:您不知道要插入或更新信息的表可能会发生什么。如果定义了多个唯一性,那么您可能会遇到严重的麻烦,这在扩展应用程序时很常见。

2 语法替换是我很少希望在我的应用程序中发生的功能。因为我不想从表中已经存在的行中丢失数据。

我并不是说他的回答是错误的,只是说明由于上述原因和可能的更多原因,在使用它时需要采取预防措施。

如第一篇文章所述,我可能是这样做的新手,但此时我更喜欢:

$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();
    }
}
于 2013-02-11T18:57:41.123 回答
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

于 2013-02-11T18:45:58.240 回答
0

@Stefanos

您可以在 SQL 查询中使用“REPLACE INTO”命令代替“INSERT INTO”。

例如

假设您有插入查询

INSERT INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');

现在您可以使用以下查询作为插入和更新的组合

REPLACE INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');

希望这会有所帮助!

于 2013-02-13T14:03:24.553 回答