MySQL INSERT - Использование цикла for () с запросом и не заданные значения вставляются как "" по умолчанию? - PullRequest
1 голос
/ 23 августа 2011

У меня есть два массива от 1 до 5 установленных значений. Я хочу вставить эти значения в таблицу с двумя столбцами.

Вот мой текущий запрос, данный мне в другом вопросе:

INSERT INTO table_name (country, redirect) 
VALUES ('$country[1]', '$redirect[1]'), 
       ('$country[2]', '$redirect[2]'), 
       ('$country[3]', '$redirect[3]'),
       ('$country[4]', '$redirect[4]'),
       ('$country[5]', '$redirect[5]')
ON DUPLICATE KEY UPDATE redirect=VALUES(redirect)

Я немного обеспокоен тем, что произойдет, если некоторые из этих значений массива не установлены, так как я полагаю, что вышеизложенное предполагает, что есть 5 наборов значений (всего 10 значений), что определенно не определено. Если значение равно нулю / 0, оно автоматически его пропускает?

Будет ли что-то вроде этой работы лучше, будет ли намного больше налог на ресурсы?

for($i = 0, $size = $sizeof($country); $i <= size; $i++) {
$query = "INSERT INTO table_name (country, redirect) VALUES ('$country[$i]', '$redirect[$i]) ON DUPLICATE KEY UPDATE redirect='$redirect[$i]'";
$result = mysql_query($query);
}

Вопросы выделены жирным шрифтом ;). Любые ответы будут очень благодарны :):) !!

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Сделайте что-то вроде этого:

$vals = array()
foreach($country as $key => $country_val) {
    if (empty($country_val) || empty($redirect[$key])) {
       continue;
    }
    $vals[] = "('" . mysql_real_escape_string($country_val) . "','" . mysql_real_escape_string($redirect[$key]) . "')";
}
$val_string = implode(',', $vals);

$sql = "INSERT INTO .... VALUES $val_string";

Это будет динамически создавать раздел значений, пропуская все, что не установлено.Однако обратите внимание, что существует ограничение длины строк запроса mysql, установленное параметром max_allowed_packet.Если вы создаете «огромный» запрос, вам придется разделить его на несколько меньших, если он превысит этот предел.

0 голосов
/ 23 августа 2011

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

 $query = "INSERT INTO table_name (country, redirect) VALUES ";
 for($i = 0, $size = $sizeof($country); $i <= size; $i++) {
  if(array_key_exists($i, $country && array_key_exists($i, $redirect)
   if($i + 1 != $size){
     $query .= "('".$country[$i]."', '".$redirect[$i]).",";
   }  else $query .= "('".$country[$i]."', '".$redirect[$i].")";
  }
 }
 $query .= " ON DUPLICATE KEY UPDATE redirect=VALUES(redirect);"
 $result = mysql_query($query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...