Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z information_schema.tables, Sprawszenie istnienia tablicy w bazie.
alpork
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 18.05.2007
Skąd: Sosnowiec

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


Witam,

Poniżej przedstawiłem fragment kody, który przy uruchomieniu skryptu ma działać następująco
- łącze się z bazą
- sprawdzam czy istnieje tablica $table_name ="route" za pomocą
if(pg_query("select count(*) from information_schema.tables where table_catalog=$dbname and table_name=$table_name"))
jeżeli "nie" to tworzę tabelę
jeżeli "tak" to łącz się z bazą

Problem polega na tym że gdy w bazie już istnieje tabela (po pierwszym uruchomieniu skryptu) to warunek
if(pg_query("select count(*) from information_schema.tables where table_catalog=$dbname and table_name=$table_name")) jest spełniony i powiniem otrzymac informacje że się połączyłem z bazą.
Nie otrzymuję tej informacj tylko wykonyje kod z elsa czyli chcę stworzyć nową tabelę która już istnieje.



  1. $dbname='postgres';
  2. $host='127.0.0.1';
  3. $user='postgres';
  4. $password='test';
  5.  
  6.  
  7. $dbconn = pg_connect("dbname=$dbname host=$host user=$user password=$password");
  8. if ($dbconn)
  9. {
  10. $table_name ="route";
  11.  
  12. if(pg_query("select count(*) from information_schema.tables where table_catalog=$dbname and table_name=$table_name"))
  13. {
  14. echo "polaczony","<br>";
  15. }
  16. else
  17. {
  18. echo "Nie ma tablicy w bazie","<br>";
  19. $zap="create table $table_name (col0 varchar(5),col1 varchar(5))";
  20. $wykonaj = pg_query($zap) or die ('Nie wykreowal tablicy');
  21.  
  22. }
  23. }
  24. else
  25. {
  26. echo "nie polacz";
  27. }
  28.  
  29. pg_close($dbconn);
  30.  



Proszę o "rzucenie okiem" na kod i podpowiedz co robię żle.

Pozd.Alpork.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




masz blad zapytania. wystarczy ze wyswietlisz sobie blad zapytania i sie dowiesz smile.gif

wszakze nie uzywam postgresa ale nie sądze by pozwalal na to:
table_catalog=$dbname and table_name=$table_name
czyli na wstawienie tekstow bez zadnych ciapków


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 18.05.2007
Skąd: Sosnowiec

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


Witam,

Problem polega na tym że już kombinowałem z ustawiemi ciapków dla zapytania
if(pg_query("select count(*) from information_schema.tables where table_catalog=$dbname and table_name=$table_name"))

Jak ustawie if(pg_query("select count(*) from information_schema.tables where table_catalog='$dbname' and table_name='$table_name'")) to wtedy warunek jest spełniony za każdym razem nie ważne czy tablica w bazie jest czy jej niema.

W logach postgres-a nie ma żadnych błedów związnych z linią.
if(pg_query("select count(*) from information_schema.tables where table_catalog=$dbname and table_name=$table_name"))

Pozd Alpork.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jak ustawie if(pg_query("select count(*) from information_schema.tables where table_catalog='$dbname' and table_name='$table_name'")) to wtedy warunek jest spełniony za każdym razem nie ważne czy tablica w bazie jest czy jej niema.
hehe, no wlasnie nie. wowczas zapytanie wykona sie poprawnie ale w zaden sposob nie wiesz czy zwrocil jakies rekordy czy nie smile.gif
zajrzyj do manuala - tam masz to wszystko ladnie opisane smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie wiem do końca co właściwie chcesz osiągnąć, ale może rozwiązaniem jest dodanie IF NOT EXISTS do CREATE TABLE? Wykonujesz to zapytanie, a potem puszczasz kod dalej bez żadnych warunków.

PS: pozdrowienia ze Środuli smile.gif
Go to the top of the page
+Quote Post
alpork
post
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 18.05.2007
Skąd: Sosnowiec

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


Witam,

Chcę sprawdzić czy tablica istnieje w bazie
- jeśli "nie" to ja stworzę i wypełnie danymi
- jeżli "tak" będę z niej korzystał.

Taki jest cel warunku z "information_schema.tables".

Pozd Alpork.

PS. Pozdrawiem również kolegę ze Środuli -smile.gif

Ten post edytował alpork 14.04.2010, 14:24:23
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




To oprócz wykonania zapytania (pg_query) musisz jeszcze jakoś pobrać uzyskany wynik. Jak to zrobić? Masz podane w dokumentacji dla pg_query.
Go to the top of the page
+Quote Post
alpork
post
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 18.05.2007
Skąd: Sosnowiec

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


Witam,

DZięki za podpowiedz, rozwiązałem problem.

Pozd Alpork.
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: 21.08.2025 - 15:02