Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczne zapytanie "CREATE TABLE "
Forum PHP.pl > Forum > PHP
Grabinx
Nie doszukałem sie niczego takiego na formu więc zadaję pytanko.

Poszukuję odpowiedzi czy da się tworzyć zapytanie SQL owe dynamicznie w poniższy sposób:

$tablica = (array a, b, c, d, ... , z)
$zapytanie = 'CREATE TABLE `'.$nazwa.'` ('
. ' `id` TINYINT NOT NULL AUTO_INCREMENT, '
/* -----------------------------------------------------------------------
W tym miejscu potrzebuję dodatkowych informacji o komórkach
zależnych od zawartosci tablicy (która jest zmienna)
tj. dla $tablicy = array (a, b, c)
zapytanie wydłużyło by się o dodatkowe wzmianki :
. ' `a` TINYINT NULL, '
. ' `b` TINYINT NULL, '
. ' `c` TINYINT NULL, '
------------------------------------------------------------------------- */
.'PRIMARY KEY (`id`)'
. ' )'
. ' TYPE = myisam';

Czy da się to jakos zrobic w prosty sposob? A jesli nie to w jaki ? ;]

Tak siedzę i patrzę w ekran czy aby ktoś już nie zechciał mi pomóc ...
I przyszło mi do głowy jedna rzecz.

Czy miało by sens w zależności od ilości zmiennych dopisywanie poprostu do zmiennej z ciagiem tekstwoym koeljnej linii tekstu tj. :
$zapytanie = 'CREATE TABLE `'.$nazwa.'` ('`id` TINYINT NOT NULL AUTO_INCREMENT, '.$kolejne.' PRIMARY KEY (id`)') TYPE = myisam';
foreach ($tabela as $cos) $kolejne = $kolejne.' `a` TINYINT NULL, ';
cos takiego chyba.
questionmark.gif?
`'.; mogły mi sie pomyslić ale chodzi mi o sposób wykonania
matipl
Po pierwsze: używaj odpowiednich znaczników jak wklejasz jakiś kod.
Po drugie: oczwyście że sie da jeśli tak musisz. Sklejanie stringów i tyle, np.
  1. <?php
  2. $zmienna = 'jakis napis: ';
  3. for($i = 0; $i < 5; $i++) {
  4.  $zmienna.= ' wartosc ' . $i . ' ';
  5. }
  6. $zmienna.= ' koniec';
  7. ?>
Grabinx
w tym samym czasie jak mi odpowiadałeś wpadłem na to (moze nie dokladnie to samo ale o sklejanie chodzi ) ;] i edytowałem posta: dzieki. Ziomku z Torunia.
WereWolf
mam małe pytanie...

czy jest to Ci potrzebne tylko na początkowym etapie instalacji bazy, czy w późniejszym działaniu serwisu, który wykorzystuje bazę?


może nie jestem jakimś specjalistą w od mySQLa, ale jeśli to drugie, to chyba niezbyt dobrze zaprojektowana baza i powinieneś pomyśleć o zmianie
1010
Może do instalacji skryptu przez mało zaawansowanych użytkowników tongue.gif
macek
albo do bardzo efektownego i szybkiego zawalenia bazy ;p
@matipl ujął to najlepiej jak się da winksmiley.jpg
1010
Pamiętaj że struktura tabeli mysql jest bardzo ważna dla poprawnego (czyt. szybkiego i bez syfu) działania serwisu...
Grabinx
Potrzebuje to do przerzucenia .dbf do MySQLa. Nie bede całosci wykorzystywał ale łatwiej mi bedzie "obrobić" dane w MySQLu i wyciagnac te co beda mi pozniej potrzebne do dzialania skryptu. Poczatkowym elementem ma byc wciaganie danych z programu ksiegowego ktory dziala na .dbfach. W chwili obecnej wrzucam wszystko i dzieki bazie danych bedzie mi latwo wylapac te dane ktore pozwola mi na zbudowanie odpowiednich bazy i tabel.
Tak wiec najpierw buduje tabele na podstawie nazw plikow ktore chce importowac. Pozniej przerzuce dane do tych tabeli a potem bede kombinowal bawiac sie zapytaniami zeby wylowic dane ktore sa mi potrzebne. Ostatecznie na 100% baza wykorzystywana w skrypcie bedzie wygladac inaczej.

Ale dzieki za uwagi.

Pojawił mi sie inny problem:
Mam funkcje odczytujaca informacje o pliku .dbf oraz (w zaleznosci od wyboru) przenoszaca z pliku dane do MySQL
  1. <?php
  2. function DbfRead($baza, $wszystkie, $tabela) 
  3. // $baza nazwa bazy
  4. // $wszystkie - jesli = 0 to tylko pobranie z pliku dbf informacji jesli =1 to odczytanie pliku
     i przeniesienie danych do bazy MySQL
  5. {
  6. $db = dbase_open($baza, 0);
  7. $nazwy = dbase_get_record_with_names($db, 0);
  8. $ile_rekordow = dbase_numrecords($db);
  9. //echo $ile_rekordow.' - rekordów <br />';
  10. $ile_pozycji = dbase_numfields($db);
  11. if ($wszystkie == 1) 
  12. {
  13. $zapytanie = 'DELETE FROM `'.$tabela.'`';
  14. mysql_query($zapytanie);
  15. if (mysql_errno()) echo 'Błąd MySQL :'.mysql_errno().': "'.mysql_error().'"<br />';
  16. else echo 'OK <br />';
  17. if ($ile_rekordow != "")
  18. {
  19. foreach($nazwy as $klucz => $wartosc) $nazwa = $nazwa.', '.$klucz;
  20. //echo $nazwa.' - nazwa <br />';
  21. for ($n=1; $n <= $ile_rekordow; $n++)
  22. {
  23. $wartosci= "";
  24. $record = dbase_get_record($db, $n);
  25. foreach($record as $wartosc) 
  26. {
  27. $wartosc = addslashes($wartosc);
  28. $wartosci = $wartosci.', "'.$wartosc.'"';
  29. }
  30. $zapytanie = 'INSERT INTO '.$tabela.' (id'.$nazwa.') VALUES (""'.$wartosci.')';
  31. //echo $zapytanie.' - '.$n.'<br />';
  32. mysql_query($zapytanie);
  33. if (mysql_errno()) echo 'Błąd MySQL :'.mysql_errno().': "'.mysql_error().'"<br />';
  34. }
  35. $dbf_info = array( 'dane'=> $record);
  36. }
  37. if($n != '') echo 'W tabeli '.$tabela.' zapisano '.($n-1).'wiersz(y). <br />';
  38. else echo 'Tabela pusta lub błąd. Nie zapisano żadnych wartości do tabeli <br />';
  39. }
  40. else $dbf_info = array( 'rekordy'=>$ile_rekordow, 'pozycje'=>$ile_pozycji, 'nazwy'=>$nazwy);
  41. dbase_close($db);
  42. return($dbf_info);
  43. }
  44. ?>


Moje pytanko:
Czy to jest zrobione logicznie (prosze o konstuktywna ocene)?
Czy mozna to zrobić inaczej (aby było szybsze i prostrze) ?
Co trzeba zrobić (bez zmianach w ustawieniu php i MySQL) aby nie wyskakiwał mi bład :
"Fatal error: Maximum execution time of 30 seconds exceeded in <sciezka>\fun_bib.php on line 91 "
gdy przenosze do bazy MySQL duuuuuzy plik dbf ? Co by trzeba w tym poprawić?
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.