2013-04-02 95 views
1

我试图更新特定用户的生物列,但我得到一个新的行。通过类似的问题,但不知道我的情况。mysql创建一个新的行而不是更新现有的

if (isset($_SESSION['logged_in']) && $_SESSION['name_of_user'] == $profile_name) { 
    $pageOwner = true; 
} 
if (isset($_POST['submit'])) { 
    $bio = $_POST['bio']; 

    if (empty($bio)) { 
     $error = "Missing Bio"; 
    } else { 
     if ($member_bio->num_rows == 1) { 

      if ($query = $db->query("UPDATE user_account SET 'bio'='$bio' WHERE 'id_user'='$id'")) { 
       $ok_mesg = "Profile has been updated!!!"; 

      } else { 
       $error = "ERROR on our end"; 
      } 
     } else { 
      if ($query = $db->query("INSERT INTO user_account (bio) VALUES('$bio')")) { 

       $ok_msg = "Profile has been updated"; 
      } else { 
       $error = "Error on our end"; 
      } 
     } 
    } 
} 
+6

** **警告你的代码可能会受到SQL注入攻击! –

+1

修复您的缩进。 –

+3

并添加if语句的其余部分 – Chandu

回答

8

您可以直接UPDATE如果该值已经存在或INSERT,如果它不使用INSERT...ON DUPLICATE KEY UPDATE

存在,但首先你需要指定一个唯一列,

ALTER TABLE user_account ADD CONSTRAINT tb_uq UNIQUE (id_user) 

如果列ID_USER已经是主键,然后跳过第一种方法。它已被实施后,您现在可以使用下面的语法

INSERT INTO user_account (id_user, bio) 
VALUES($id, '$bio') 
ON DUPLICATE KEY UPDATE bio = '$bio'; 

一点题外话,查询很容易受到与SQL Injection如果变量的值(小号)来自外面。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。

+0

现在工作!感谢您的快速回答和建议阅读。你们都很棒:) – user2234155

+1

嘿,谢谢你们的抬头。我相信会有更多的问题。下次会记得;) – user2234155

相关问题