2013-07-11 3 views
0

Я написал следующий код для хранения данных на моем mysql db. Проблема в том, что запрос на вставку или обновление выполняется один раз, только первый цикл. Я попытался найти поиск решений в stackoverflow и google, но безуспешно. Любой может мне помочь.mysqli выполняет несколько запросов в foreach

foreach($data as $val){ 

      $result = $con->query('SELECT id FROM mytable where name = "'.$val'"'); 
      $row = $result->fetch_row(); 

      if(isset($row[0])) $id = $row[0]; 

      if(!isset($id)) { 
       $queryInsert = "INSERT INTO mytable bla bla);"; 
       $result = $con->query($queryInsert); 
       $id = $con->insert_id; 
      } 
      else { 
       $queryUpdate = "UPDATE mytable bla bla"; 
       $result = $con->query($queryUpdate); 
      } 

      //other code and queries ... 

     } 
+0

использовать функцию MySQL 'вставки на дубликат ключа update' – goat

ответ

1

Вы можете проверить num_rows, а затем вставить или обновить

foreach($data as $val){ 
    $result = $con->query('SELECT id FROM mytable where name = "'.$val.'"'); 
    $num = $result->num_rows; 

    if($num){ //it exists -> update 

     $queryUpdate = "UPDATE mytable SET bla bla"; 
     $resultUpdate = $con->query($queryUpdate); 
     $row = $result->fetch_assoc(); 
     $id = $row['id']; 

    } else { //it doesnt exist insert 

     $queryInsert = "INSERT INTO mytable VALUES (bla bla);"; 
     $resultInsert = $con->query($queryInsert); 
     $id = $resultInsert->insert_id; 
    } 
} 
+0

мне нужно, чтобы сохранить переменную $ ID также, если есть обновление, потому что Я должен сохранить в другой таблице это значение. Проблема в том, что вставка или обновление выполняется только в первом цикле. – Danilo

+0

Я также добавил '$ id' на обновление. –