2013-09-02 3 views
1

У меня есть многомерный массив, который я хочу вставить в MySQL через оператор UPDATE. Но я хочу, чтобы он обновлялся, только если entry_id из массива соответствует entry_id из DB. Если он соответствует значениям из массива, он должен быть обновлен.Как обновить mysql tabel с многомерным массивом

Это мой многомерный массив с именем значения

Array ( 

[0] => Array ([entry_id] => 41149 [o_number] => 000001 [test1] => 000001 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4) 

[1] => Array ([entry_id] => 41142 [o_number] => 000202[test1] => 000202 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4) 

[2] => Array ([entry_id] => 41103 [o_number] => 000003 [test1] => 000003 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4) 

[3] => Array ([entry_id] => 41101 [o_number] => 000044 [test1] => 000044 [test2] => 1234 [lev] => Ja [fak] => Manuel/brev [beta] => 10 [test] => 2) 

[4] => Array ([entry_id] => 41100 [o_number] => 000542 [test1] => 000542 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4)) 

Это мои полей БД, я хочу, чтобы обновить.

o_number  test1  test2  lev  fak  beta 

И это, как мой DB выглядит сейчас

title   entry_id  o_number  test1  test2  lev  fak  beta 
Rest Soya  41149   
Cafe Bella  41142   
Danglette  41103 

Это мой код, чтобы узнать, как итерацию через в качестве одномерного массива, а затем обновить MYSQL. Но я хочу только обновить, если соответствует entry_id.

Итак, вопрос в том, как я могу обновить таблицу, когда у меня есть многомерный массив? Я пробовал это так, но не решил проверить его, потому что я не хочу вставлять что-то неправильно. Есть ли лучший и эффективный способ сделать это?

foreach ($values as $key) 
{ 
     $sql_update = "UPDATE exp_channel_data set 
     o_number =$key['o_number'], 
     lev ='$key['lev']', 
     fak =$key['fak'], 
     beta =$key['beta'], 
     test1 =$key['test1'], 
     test2 =$key['test2'] 

     where entry_id = '$entry_id" 

     $this->EE->db->query($sql_update); 
} 

Это мой желаемый результат в моей БД

title     entry_id  o_number  test1  test2  lev  fak  beta 
Rest Soya    41149  000001  000001 1234  Ja  Mail 30 
Cafe Bella    41142  000202  000202 1234  Ja  Mail 30 
Danglette    41103  000003  000003 1234  Ja  Mail 30 
+0

Это подходящий способ сделать это, за исключением того, что у вас много проблем с цитированием. – Barmar

+0

Что это значит? – Zaz

ответ

2

Когда вы интерполировать ссылки массива в строку, вы должны либо окружить значение с {} или выйти из кавычки вокруг индексов массива. Вы также забыли использовать ссылку на массив, чтобы получить entry_id, и у вас были несогласованные цитаты вокруг него.

foreach ($values as $key) 
{ 
     $sql_update = "UPDATE exp_channel_data set 
     o_number ={$key['o_number']}, 
     lev ='{$key['lev']}', 
     fak ='{$key['fak']}', 
     beta ={$key['beta']}, 
     test1 ={$key['test1']}, 
     test2 ={$key['test2']} 

     where entry_id = '{$key['entry_id']}'"; 

     $this->EE->db->query($sql_update); 
} 

Я не могу сказать, какой MySQL API вы используете. Вместо интерполирования строк было бы лучше использовать параметризованные запросы. Если вы используете mysqli или PDO, вы должны исправить свой класс db, чтобы это разрешить.

+0

Это не будет обновление? – Zaz

+0

Я добавил цитаты вокруг '$ key ['fak']', так как это строка. – Barmar

+0

Все тот же @Barmar – Zaz

Смежные вопросы