![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 7.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Zaczynam kombinować z klasami (ciekawie to wygląda) i zbudowałem sobie takie maleństwo do wstawiania rekordu do tablicy (rzecz jasna jest częścią klasy):
[php:1:90532def57]<?php function wstaw($tabela, $wartosci) // wstawia nowe pole do tabeli ($tabela). $wartosci musi być tablicą o ilości parametrów // równej ilości pól w tabeli. { global $baza; $lista = mysql_list_fields($baza, $tabela); $ilosc = mysql_numfields($lista); $max = $ilosc - 1; if (!is_array($wartosci)) { return -1; exit;} else { $liczba = count($wartosci); if ($liczba <> $ilosc) { return -2; exit;} else { for ($w = 0; $w <= $ilosc-1; $w++) { $nazwy .= mysql_fieldname($lista,$w); $wart .= $wartosci[$w]; if ($w <> $ilosc-1) { $nazwy .= ", "; $wart .= ", ";}; } $sql = "INSERT INTO $tabela ($nazwy) VALUES ($wart)"; $result = mysql_query($sql) or die ('Błąd podczas wykonywania zapytania [funkcja "wstaw"].'); return 0; }; }; } ?>[/php:1:90532def57] Działa, wstawia tak, jak trzeba. Mam jednak dwa pytania: 1. Jak sądzicie, czy rozwiązanie polegające na wydłubywaniu nazw pól z bazy jest ergonomiczne? Może lepiej byłoby ręcznie podawać pola? 2. Zastosowanie for zamiast foreach jest dobrym rozwiązaniem? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
W/g mnie lepiej nie bazować na kolejności i ilości kolumn w tabeli. Jak się zdarzy, że będziesz musiał dodać do tej tabeli jakieś pole wszystko Ci się rozjedzie. Lepiej przekazywać do funkcji hasza z polami:
[php:1:a738cea0db]<?php function wstaw($tabela, $wartosci) { foreach ($wartosci as $k => $v) if ($v != 'null') $wartosci[$k] = "'$v'"; mysql_query("insert into $tabela (" . join(', ', array_keys($wartosci)) . ') values (' . join(', ', array_values($wartosci)) . ')'; return 0; } wstaw('tabela', array('pole1' => 'wartosc1', 'pole2' => 'wartosc2')); ?>[/php:1:a738cea0db] Cytat 1. Jak sądzicie, czy rozwiązanie polegające na wydłubywaniu nazw pól z bazy jest ergonomiczne? Może lepiej byłoby ręcznie podawać pola?
Zawsze jest to dodatkowe zapytanie przy każdym wsadzaniu do bazy, więc narzut czasowy jakiś też jest. Z drugiej strony, to zapytanie nie jest znów aż tak czasochłonne bo zwraca wynik ze schematu bazy, a nie z samych danych. Cytat 2. Zastosowanie for zamiast foreach jest dobrym rozwiązaniem?
Czas wykonania for i foreach jest porównywalny. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 7.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za sugestię. Nie odzywałem się długo, ale projekt, w którym wykorzystam te klasy przesunął się gdzieś na połowę grudnia, z powodu dodatkowych zajęć i czegoś, co nurtuje chyba każdego [cytując Vabank: "Kruca bomba, mało casu..."
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 15.02.2003 Skąd: Ziemia Ostrzeżenie: (0%) ![]() ![]() |
[php:1:96312c1558]<?php
function sql_Insert($result,$tabelka,$wektor,$wektorb,$db,$field) { $sql = "INSERT INTO ".$tabelka." ("; for ($i=0;$i<$db->sql_numfields($result);$i++) { $sql .= $db->sql_fieldname($i, $result); $sql .= ($i < ($db->sql_numfields($result) - 1)) ? (", ") : (""); } $sql .= ") VALUES ('', "; $j = 0; for ($i=0;$i<($db->sql_numfields($result) - 1);$i++) { if ($i != ($db->sql_numfields($result) - 2)) { $sql .= ($i < ($db->sql_numfields($result) - 2)) ? ($input = (is_array($field) && $field[$j]) ? ($field[$j]."('".$_SESSION[$wektor][$j]."'), ") : ("'".$_SESSION[$wektor][$j]."', ")) : ($input = (is_array($field) && $field[$j]) ? ($field[$j]."('".$_SESSION[$wektor][$j]."'), ") : ("'".$_SESSION[$wektor][$j]."'")); $j++; } if ($wektorb) { if ($i == ($db->sql_numfields($result) - 2) && $wektorb) { $sql .= "'".$fmbt = ($_SESSION[$wektorb][0]) ? ($_SESSION[$wektorb][0] . "'") : ("off")."'"; } } else { if ($i == ($db->sql_numfields($result) - 2)) { $sql .= ($input = (is_array($field) && $field[$j]) ? ($field[$j]."('".$_SESSION[$wektor][$j]."'), ") : ("'".$_SESSION[$wektor][$j]."'")); $j++; } } } $sql .= ")"; return ($sql); } // end func sql_Insert ?>[/php:1:96312c1558] $db->sql_numfields - pobiera liczbe pol ( mysql_num_fields() ) $db->sql_fieldname - pobiera nazwe pola ( mysql_field_name() ) coprawda narazie jest jeszcze troche "statyczną" funkcja, ale jak narazie sprawdza się . -------------------- Warsztat: IIS 6.0 | PHP 4.3.10 && 5.0.3 | MySQL 4.1.9 | Smarty 2.6.7 | PEAR | EditPlus 2 Produkcja: FlipTiM |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 00:21 |