2013-04-02 4 views
1

Я пытаюсь обновить столбец bio для конкретного пользователя, но вместо этого я получаю новую строку. Были схожие вопросы, но не могли бы разобраться в моей ситуации.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, если значение (s) переменных пришел извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

+0

Работает сейчас !!! Спасибо за быстрые ответы и предложил прочитать. Вы, ребята, великолепны :) – user2234155

+1

Эй, спасибо за головы. Я уверен, что будет больше вопросов. Вспомни в следующий раз;) – user2234155

Смежные вопросы