Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tablice, indexy 0, 1, 2
Krzychur
post
Post #1





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam!
Właśnie napisałem swoją, narazie jeszcze prostą klasę obsługi bazy danych. Poniżej załączam urywek funkcji dodającej rekord to tablicy:
  1. <?php
  2. public function insert($table, $values, &$reference = '') {
  3. $this -> queries++;
  4.  
  5. foreach ($values as $field => $value) {
  6. if (!isset($comma)) {
  7. $array = array('fields' => '`'.$field.'`','values' => '''.$value.''');
  8. $comma = '';
  9. }
  10. else {
  11. $array['fields'] .= ', `'.$field.'`';
  12. $array['values'] .= ', ''.$value.''';
  13. }
  14. }
  15. $query = 'INSERT INTO `'.$this -> prefix.$table.'` ('.$array['fields'].') VALUES ('.$array['values'].')';
  16.  
  17. switch ($this -> db_type) {
  18.  
  19. // ... MySQL database
  20. case 'mysql':
  21. if (@mysql_db_query($this -> db_name,$query,$this -> link_id)) {
  22. $reference = mysql_insert_id();
  23. return TRUE;
  24. }
  25. else {
  26. $reference = mysql_error();
  27. return FALSE;
  28. }
  29. break;
  30. }
  31. }
  32. ?>

Zależy mi na napisaniu warunku, który pozwalałby na wysłanie zapytania w stylu:
INSERT INTO `tabela` VALUES ('x','y','z');
czyli bez podawania nazw pól w tabeli.

Wydaje mi się, że najłatwiejszym sposobem byłoby sprawdzenie indexów tablicy, czy są numerowane od zera wzwyż. Wydaje mi się też, że nie ma takiej funkcji, bo przeglądając manual, znalazłem tylko dwie funkcje, których skrócony opis zaczyna się wyrażeniem Checks mianowicie: array_key_exists i in_array...

Moje sugerowane rozwiązanie tego problemu to schematycznie:
Kod
<?
$i = -1;
foreach ($table as $index => $value) {
$i++;
if ($index != $i) {
  $false = '';
}
}
?>


Czy ktoś ma na myśli jakieś ciekawsze rozwiązanie? Dzięki winksmiley.jpg!


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
ennics
post
Post #2





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

Ostrzeżenie: (0%)
-----


kiedyś napsałem coś takiego, ale już nie korzystam...
może sięprzyda

  1. <?php
  2.  
  3. //...
  4.  
  5. $show_fields = &#092;"SHOW FIELDS FROM \".$table.\"\";
  6. $query_show = mysql_query( $show_fields );
  7.  
  8. while ( $row = mysql_fetch_array( $query_show ) )
  9. {
  10. $_colNames[$table][] = $row['Field'];
  11. }
  12.  
  13. $n_colN = count( $_colNames[$table] )-1;
  14. $_colNames[$table] = array_slice( $_colNames[$table], 0, $n_colN ); // bez ostatniej kolumny
  15.  
  16. $sql = &#092;"INSERT INTO \".$table.\" (\";
  17. foreach ( $_colNames[$table] as $key => $val )
  18. {
  19. $sql .= &#092;"`\".$val.\"`, \"; // pola
  20. }
  21. $sql .= &#092;"`uniqNr`) VALUES (\"; // ostatnie bez przecinka
  22. foreach ( $_colNames[$table] as $key => $val )
  23. {
  24. if ( ereg( &#092;".+_lp$\", $val ) )
  25. {
  26. $sql .= &#092;"'', \"; // autoincrement - puste
  27. }
  28. else
  29. {
  30. $sql .= &#092;"'\".$$val. \"', \";
  31. }
  32. }
  33. $sql .= &#092;"'$uniqNr'\"; // ostatnie bez przecinka
  34. $sql .= &#092;")\"; // ostatnie bez przecinka
  35.  
  36.  
  37. ?>


--------------------
Go to the top of the page
+Quote Post
Krzychur
post
Post #3





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Zapewniam Cie, że takie rozwiązanie, do takiego "duperelu" jest znacznym zwiększeniem czasu generowania strony, ale aby go użyć i tak muszę wiedzieć, jak programista zdecydował się odwołać się do metody.


--------------------
Go to the top of the page
+Quote Post
ennics
post
Post #4





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

Ostrzeżenie: (0%)
-----


metoda jest wyrwana z kontekstu kodu zbudowanego proceduralnie który stworzyłem na własne potrzeby. Trzeba eksperymentować ;]
wydajna nie jest, to napewno, ale pokazuje jak można zbudować sterownik do bazy danych który będzie zapisywał informacje bez konieczności podawania nazw kolumn ( są wczytywane przez SHOW FIELDS FROM table i obrabiane w tablicy asocjacyjnej ).

Ten post edytował ennics 20.06.2005, 16:35:52


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


pomylisz kolejność, ilość pól, dodasz jakies pole do bazy - padnie. lepiej odpuść.
Go to the top of the page
+Quote Post
ennics
post
Post #6





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

Ostrzeżenie: (0%)
-----


przyznam szczerze że nie rozwijałem tego kodu ale działał przez dłuższy czas i nie generował błędnych wpisów do bazy. Technicznie można doprowadzić kod do takiej postaci, że nie pozwoli na błąd programowy, niestety trudno przewidzieć czynnik ludzki ;]


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:16