Изменение статического обновления SQL на динамическое на основе изменения имен столбцов - PullRequest
0 голосов
/ 01 сентября 2011

Хорошо, я задал вопрос вчера вечером и получил ряд действительно хороших ответов.Так как я впервые использовал StackOverflow, я был очень доволен.

Я надеюсь, что вы, ребята, можете помочь с новым.Надеюсь, что в будущем я смогу отплатить некоторым НОВЫМ новичкам.

У меня есть следующий код в php-файле:

  $sql = "";
  $now=date("Y-m-d h:i:s");
  $updatedRecords = $json1->{'updatedRecords'};
  foreach ($updatedRecords as $value){
     $sql = "update `acea` set ".
      "`ACEA_A1`='".$value->ACEA_A1 . "', ".
      "`ACEA_A2`='".$value->ACEA_A2 . "', ".
      "`ACEA_A3`='".$value->ACEA_A3 . "', ".
      "`ACEA_A4`='".$value->ACEA_A4 . "', ".
      "`ACEA_A5`='".$value->ACEA_A5 . "', ".
      "`ACEA_B1`='".$value->ACEA_B1 . "', ".
      "`ACEA_B2`='".$value->ACEA_B2 . "', ".
      "`ACEA_B3`='".$value->ACEA_B3 . "', ".
      "`ACEA_B4`='".$value->ACEA_B4 . "', ".
      "`ACEA_B5`='".$value->ACEA_B5 . "', ".
      "`ACEA_E1`='".$value->ACEA_E1 . "', ".
      "`ACEA_E2`='".$value->ACEA_E2 . "', ".
      "`ACEA_E3`='".$value->ACEA_E3 . "', ".
      "`ACEA_E4`='".$value->ACEA_E4 . "', ".
      "`ACEA_E5`='".$value->ACEA_E5 . "', ".
      "`ACEA_E7`='".$value->ACEA_E7 . "' ".
      "where `acea_id`=".$value->acea_id;
      if(mysql_query($sql)==FALSE){

        $errors .= mysql_error();
      }
  }

Части "ACEA_XX"относятся к столбцам в таблице базы данных «acea» (очевидно), но программист установил их статически.К сожалению, эти столбцы необходимо периодически добавлять, создавая новые столбцы, связанные с новыми введенными спецификациями ACEA.

В результате этот код становится устаревшим.

Без необходимостизаходите и обновляйте этот код каждый раз, когда я добавляю новый столбец, как я могу изменить дизайн этого кода, чтобы он динамически обновлялся для включения новых столбцов?Я все утро пытался заставить его работать, и я могу установить его так, чтобы я мог динамически вставлять фактические имена столбцов в оператор обновления, но я не могу динамически захватывать связанные значения динамически (и я думаю,мой метод захвата и вставки имен столбцов немного запутан).

Мои фактические столбцы таблицы базы данных в настоящее время:

acea_id ACEA_A1 ACEA_A2 ACEA_A3 ACEA_A4 ACEA_A5 ACEA_B1 ACEA_B2 ACEA_B3 ACEA_BE_EAE1ACEA_E5 ACEA_E6 ACEA_E7 ACEA_E9 oil_data_id

Первый и последний столбцы никогда не изменятся и будут оставаться первым и последним столбцами.Любые новые столбцы будут добавлены где-то посередине, но не обязательно непосредственно перед столбцом «oil_data_id».

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

У кого-нибудь есть краткая модификация кода, чтобы делать то, что я хочу?Был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Похоже, что метод Дуга Кресса выдает некоторые ошибки, так что вот мой выстрел:

$errors = array();
foreach($json1->updatedRecords as $record)
{
    $fields = array();

    foreach($record as $field => $value)
    {
        if(substr($field, 0, 5) === 'ACEA_')
        {
            $fields[] = $field.' = '.mysql_real_escape_string($value);
        }
    }

    // Check if there are any fields set to be updated.
    if(isset($fields[0]))
    {
        // I'm assuming $record->acea_id is an integer. If not,
        // replace '%d' with '%s'.
        $sql = "UPDATE `acea` SET %s WHERE `acea_id` = '%d';";
        $sql = sprintf($sql, implode(',', $fields), $record->acea_id);

        if(mysql_query($sql) === false)
        {
            $errors[] = mysql_error();
        }
    }
}
0 голосов
/ 01 сентября 2011

Во-первых, я бы настоятельно рекомендовал сделать это в отдельной таблице (если хотите, перевернуть данные в сторону).Предполагая, что это невозможно:

$sql = "";
$updatedRecords = $json1->{'updatedRecords'};
foreach ($updatedRecords as $values){
    $flist = array();
    $params = array();
    foreach ($values as $key => $value) {
        if (preg_match('/^ACEA_[A-Z]+\d+$/', $key)) {
            $flist[] = $key .'="%s"';
            $params[] = mysql_real_escape_string($value);
        }
    }

    $sql = "update `acea` set ". implode(', ', $flist) .
        "WHERE `acea_id`='%s'";
    $params[] = mysql_real_escape_string($value->acea_id);
    $sql = sprintf($sql, $params);

    if(mysql_query($sql)==FALSE){
        $errors .= mysql_error();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...