Как вставить в … Значения … Где значение = равно заданному пользователем? Сложный запрос

#php #html #mysql

#php #HTML #mysql

Вопрос:

Я должен вставить в partnerCode ячейку, где введенное пользователем значение равно randomfield , и оно должно быть вставлено точно в противоположную ячейку, где randomfield=partnerCode

Например: Введенное значение равно 66666, оно существует в randomfield и вставлено в противоположную ячейку

    ID      randomfield  partnerCode    
 ------- ------------- ------------- 
|   1   |  555555     |    null     |
 ------- ------------- ------------- 
|   2   |  666666     |   666666    | 
 ------- ------------- ------------- 
|   3   |  777777     |    null     |
 ------- ------------- ------------- 
  

HTML-код формы:

      <form name="Partner" action="../../pages/examples/profile.php" method="POST" >

  <input class="random-but"  name="partnerCode" value="<?php echo $partnerCode; ?>"> 
   <input class="reload-but" type="submit" value=" >>>" name="partnerCode">  



                </form>   
  

Здесь код вставки, но работает некорректно

     if (isset($_POST['partnerCode'])) {
      // receive all input values from the form
       $partnerCode= mysqli_real_escape_string($db, $_POST['partnerCode']);

      $user_check_query = "SELECT * FROM refer WHERE partnerCode='$partnerCode' LIMIT 1";
      $result = mysqli_query($db, $user_check_query);
      $user = mysqli_fetch_assoc($result);



    if (count($errors) == 0) {

     $query = "INSERT INTO refer (randomfield, partnerCode)  
VALUES('$randomfield', '$partnerCode') where 
randomfield='$partnerCode' ";
            mysqli_query($db, $query);  
    }   
  

Комментарии:

1. INSERT не принимает WHERE предложение. Вы ищете UPDATE

2. Вам следует выполнить некоторую проверку ошибок (в дополнение к обзору некоторых основ MySQL). за INSERT INTO не должно следовать WHERE .

3. @Patrick Вопрос: Да! Вот почему я ищу решение

Ответ №1:

Вместо insert Вы должны использовать UPDATE

     update refer 
    set partnerCode = '$partnerCode' 
    where randomfield='$partnerCode' 
  

в любом случае вместо php var в sql и mysqli_real_escape_string вы должны взглянуть на драйвер вашей БД для подготовленных инструкций и параметров привязки

Комментарии:

1. «в любом случае вам не следует использовать php в sql, вы подвергаетесь риску sqlijection .. » Что следует использовать альтернативно? Есть какой-нибудь источник, где я могу прочитать об этом?

2. вместо php var и mysqli_real_escape_string l вам следует взглянуть на подготовленные инструкции и параметры привязки php.net/manual/en/mysqli.quickstart.prepared-statements.php (я вижу, вы использовали mysqli_real_escape_string, чтобы избежать проблемы .. но подготовленный оператор и параметр привязки более мощные)