Простое ОБНОВЛЕНИЕ таблицы MySQL из массива php

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

Я пытаюсь собрать функцию, которая выполняет следующее:

  1. извлечение строки в формате JSON из формы
  2. расшифруйте строку в массив php
  3. перебирайте сгенерированный массив php, чтобы получить значения для каждой части массива, чтобы я мог обновить таблицу MySQL

Вот мой функциональный код до сих пор:

 public function saveTestimonials() {


    $existing_testimonials_update = $this->post('data');

    $update_array = json_decode($existing_testimonials_update);

    foreach ($update_array as $key => $testimonials) {
         foreach($testimonials as $key => $value) {
            //echo "$key = $valuen";

        }
    }

    $db = Loader::db();
    $sql = "UPDATE testimonials SET name=var, content=var WHERE id=var";
    $db->query($sql);

    $this->redirect('/dashboard/testimonials/');

}
  

Вот массив, хранящийся в переменной $update_array:

 Array
(
[0] => stdClass Object
    (
        [id] => 1
        [name] => Mr. John Doe, Manager, ABC Ltd
        [content] => my content 1.
    )

[1] => stdClass Object
    (
        [id] => 2
        [name] => Mr. Joe Smith, Manager, ABC Industries
        [content] => my content 2.
    )

[2] => stdClass Object
    (
        [id] => 3
        [name] => Mr. Mike Smith, Manager, ABC Industries
        [content] => my content 3.
    )

[3] => stdClass Object
    (
        [id] => 4
        [name] => Ms. Jane Doe, Manager, ABCD Ltd
        [content] => my content 4.
    )

)
  

У меня есть шаги 1 и 2, которые работают нормально, однако я застрял на шаге 3.

Я все еще изучаю PHP и время от времени сталкиваюсь с синтаксисом. Я пытался разобраться с этим самостоятельно и потратил на это несколько часов, но, похоже, просто не могу разобраться в этом.

Любая помощь очень ценится.

Ответ №1:

 foreach ($update_array as $key => $testimonials) {
    $name = mysql_real_escape_string($testimonials->name);
    $content = mysql_real_escape_string($testimonials->content);
    $id = intval($testimonials->id);

    $sql = "UPDATE testimonials SET name='$name', content='$content' WHERE id=$id";
    $result = mysql_query($sql);
    if ($result === FALSE) {
        die(mysql_error());
    }
}
  

Ответ №2:

Я использую что-то вроде этого. Может быть, это поможет вам!

 function updateDbRecord($db, $table, $carry, $carryUrl) {   
    mysql_select_db($db) or die("Could not select database. " . mysql_error());
    $resultInsert = mysql_query("SHOW COLUMNS FROM " . $table . " WHERE Field NOT IN ('id')");
    $fieldnames=array();
      if (mysql_num_rows($resultInsert) > 0) {
        while ($row = mysql_fetch_array($resultInsert)) {
            $fieldnames[] = $row['Field'];
            $array = array_intersect_key( $_POST, array_flip($fieldnames) );
        }
      }
      foreach ($array as $key => $value) {
        $value = mysql_real_escape_string($value);
        $value = "'$value'";
        $updates[] = "$key = $value";
      }
      $implodeArray = implode(', ', $updates);
      $sql = sprintf("UPDATE %s SET %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);
      mysql_query($sql);
      if ($carry == 'yes') {
        redirect($carryUrl.'?id='.$_REQUEST['id'].'amp;'.$table);
      } else { echo "Done!"; }
}
  

Ответ №3:

Это объекты, с которыми вы имеете дело внутри update_array, поэтому вы должны иметь к ним доступ следующим образом:

 $update_array = json_decode($existing_testimonials_update);

foreach ($update_array as $key => $testimonials) {
     $testimonials = (array) $testimonials;
     foreach($testimonials as $key => $value) {
        //echo "$key = $valuen";

    }
}
  

Или, проще говоря, вы можете использовать оператор стрелки ($testimonials-> name) для доступа к переменным.

Ответ №4:

Вы получаете объект из json_decode(). Если вы передадите true в качестве второго аргумента в json_decode(), вы получите ассоциативный массив.

http://php.net/manual/de/function.json-decode.php

Ответ №5:

попробуйте что-то вроде этого

  $db = Loader::db();

foreach ($update_array as $key => $testimonials) {
         foreach($testimonials as $testimonial) {

             // escape data to avoid sql injection
             $id = mysql_escape_string($testimonial->id);
             $name = mysql_escape_string($testimonial->name);
             $content = mysql_escape_string($testimonial->content);

             $sql = "UPDATE testimonials SET name='$name', content='$content' WHERE id='$id'";
             $db->query($sql);

             // TODO check for database error here

        }
    }
  

Ответ №6:

 function update($table_name, $myarray, $my_wheres) {
    $sql = "Update`".$table_name.
    "` SET ";
    $i = 0;
    foreach($myarray as $key => $value) {
        $sql.= $key." = '".$value."'";
        if ($i < count($myarray) - 1) {
            $sql.= " , ";
        }
        $i  ;
    }
    if (count($my_wheres) > 0) {
        $sql.= " WHERE ";
        $i = 0;
        foreach($my_wheres as $key => $value) {
            $sql.= $key.
            " = ".$value;
            if ($i < count($my_wheres) - 1) {
                $sql.= " AND ";
            }
            $i  ;
        }
    }

    return mysqli_query($sql);
}
  

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