2013-02-28 6 views
0

У меня есть два массива, один из которых содержит имена полей, которые вставляются в строку с именем $ fields и один, содержащий данные, вложенные в $ data. Когда данные первого вводятся с помощью INSERT команду запроса выглядит как ...массивы чередования для обновления mysql

mysql_query("UPDATE table ($fields) VALUES ($data)") 

(BTW: все данные продезинфицировать)

Моя цель состоит в том, чтобы построить MySQL UPDATE заявление, в котором синтаксис

mysql_query("UPDATE table SET $field1=$data1, $field2=$data2 ...") 

и обновлять все поля за один раз, поэтому мне нужно объединить два массива для создания переменного поля/данных/поля/структуры данных, а не всех полей, за которыми следуют все данные.

Моя идея заключается в том, чтобы использовать array_combine или array_merge, а затем implode в строку, которая будет затем установить функцию

mysql_query("UPDATE table SET $imploded-combined-arrays") 

Я признаю, что это не будет работать как «клей» из заявления Implode имеет два разных значения в зависимости от того, является ли оно эквивалентом или разделяет пары полей/данных.

Как я могу пройти через оба массива и построить строку, подходящую для синтаксиса UPDATE?

Спасибо,

Cam

ответ

1
$names = array ('foo', 'bar'); 
$values = array ('hello', 'world'); 
$pairs = array(); 

foreach ($names as $i => $name) 
{ 
    $value = $values [$i]; 

// $name = mysql_real_escape_string ($name); 
// $value = mysql_real_escape_string ($value); 

    $pairs [] = "`$name` = '$value'"; 
} 

echo ("UPDATE t SET " . implode (', ', $pairs)); 

Для меня выходов:

UPDATE t SET `foo` = 'hello', `bar` = 'world' 
+0

идеально - как раз то, что мне нужно было – user1940081

2

Попробуйте

$a = array('key1', 'key2', 'key3'); 
$b = array('value1', 'value2', 'value3'); 
$c = array_combine($a, $b); 
foreach($c as $key=> $value){ 
    $result[]=$key."='". $value."'"; 
} 
$updatefields= implode (', ', $result); 

echo ("update table set " .$updatefields); 

OUTPUT

update table set key1='value1', key2='value2', key3='value3' 

DEMO

+0

Спасибо - что работали отлично. – user1940081

+0

Добро пожаловать. Если вам это поможет, пожалуйста. – Reshil