Alek
12.09.2003, 10:19:19
Witam,
Mam tablice o sporych rozmiarach pojedynczego rekordu (kilkadziesiat kolumn). Mam tez te kilkadziesiat wartosci w tablicy w php ($nowy_rekord[]), gdzie nazwy pol odpowiadaja nazwom kolumn z tablicy w bazie danych.
Jak wykonac "hurtowy" INSERT lub UPDATE uzywajac danych z tablicy $nowy_rekord[] ?
Dzialam w MySQL pod Win98, php chodzi na Apache1.3 .
Pisanie tak wielu pozycji np. w:
[sql:1:c94b0e5254]UPDATE tab SET kolumna_tablicy=$nowy_rekord[kolumna_tablicy]...[/sql:1:c94b0e5254]
jest odrobine zmudne :?
pozdrawiam
Alek
radzaw
12.09.2003, 13:43:33
moze po prostu
[sql:1:caeb0b0587]
update tab set kolumna_1 = $nowy_rekord[kolumna_1], kolumna_2 = $nowy_rekord[kolumna_2] ...
[/sql:1:caeb0b0587]
albo maly skrypcik ktory zrobi nam to zapytanie :
[php:1:caeb0b0587]<?php
$kolumny=array('kolumna_1', 'kolumna_2');
$sql="";
for ($i=0; $i<count($kolumny); $i++)
{
$nazwa=$kolumna[$i];
$sql.=(($sql) ? ', ' : '') . $nazwa . " = '" . $nowy_rekord[$nazwa] ."'";
}
$zapytanie="UPDATE tab SET ". $sql;
?>[/php:1:caeb0b0587]
scanner
12.09.2003, 13:47:20
musisz stworzyć kawałek kodu, który sam poskłada odpowiednie zapytanie SQL'a wyglądająca mniej więcej tak: [php:1:da6a391940]<?php
$sqlQuery = 'UPDATE table SET';
foreach ($nowy_rekord as $strKey => $mixValue)
{
$sqlQuery .= ' '.$strKey.' = '.$mixValue.',';
}
$sqlQuery = substr($sqlQuery, 0, -1); // obcinamy ostatni przecinek
$sqlQuery .= ' WHERE 1'; // dalszy ciąg zapytania
?>[/php:1:da6a391940]
adwol
12.09.2003, 14:01:23
Cytat
Jak wykonac "hurtowy" INSERT lub UPDATE uzywajac danych z tablicy $nowy_rekord[] ?
[php:1:7feddfb166]<?php
print 'update tab set ' . implode(', ', array_map(create_function('$k, $v', 'return "$k='$v'";'), array_keys($nowy_rekord), array_values($nowy_rekord)));
?>[/php:1:7feddfb166]
scanner
12.09.2003, 15:14:30
Adwol: chylę czoła i zamiatam ziemię kapeluszem.
adwol
13.09.2003, 10:29:23
Cytat
Adwol: chylę czoła i zamiatam ziemię kapeluszem.
W sumie to i tak wyszło trochę przydługawo, ale niestety php nie jest tak zwięzły jak perl. Tam by było krócej, choć podobnie.
Alek
22.09.2003, 08:51:02
Dzieki wielkie.
Troche czasu netu nie mialem i tu taka mila niespodzianka po powrocie:)
No i chyba bede sie musial wziac na PERL'a
pozdrawiam
Alek
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.