Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ilość kolumn z zapytania select
tosiek
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


Witam. Oto kod:
  1. <?php
  2. if (!$lista_tabel = mysqli_query($db, "SHOW TABLES;"))
  3.    {
  4.      $info["error"][] = "Błąd bazy danych (".mysqli_errno($db)."): ".mysqli_error($db);
  5.    }
  6.    else
  7.    {
  8.      $info['ok'][] = "Pobrano listę tabel";
  9.    }
  10. while($tabela = mysqli_fetch_row($lista_tabel))
  11. {
  12.    if(!$zawartosc = mysqli_query($db, "SELECT * FROM {$tabela[0]};"))
  13.    {
  14.        $info["error"][] = "Błąd bazy danych (".mysqli_errno($db)."): ".mysqli_error($db);
  15.    }
  16.    else
  17.    {
  18.        $info['ok'][] = "Pobrano tabele: {$tabela[0]}";
  19.    $zawartosc = mysqli_fetch_row($zawartosc);
  20.    for( $i = 0, $cnt = count($zawartosc); $i <= $cnt; $i++)
  21.        {
  22.        $query .= "'".$zawartosc[$i]."', ";
  23.  
  24.        }
  25.        if(!$zawartosc = mysqli_query($db, "REPLACE INTO {$tabela[0]} VALUES({$query});"))
  26.    {
  27.            echo "REPLACE INTO {$tabela[0]} VALUES({$query});<br />";
  28.        $info["error"][] = "Błąd bazy danych (".mysqli_errno($db)."): ".mysqli_error($db);
  29.    }
  30.    }
  31. ?>


I niestety ale ilość kolumn w $query nie zgadza się z ilością w tabeli.

Czy ktoś ma pomysł jak to naprawić, lub jak nadpisać tabelę(wiersze i kolumny - wszystkie) jej własną wartością, tak ażeby móc zmieniać dane przed REPLACE ?

Ten post edytował tosiek 18.07.2009, 22:50:05


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





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie lepiej insert into ... on duplicate key?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


Zauważyłem że Ani Replace ani
Kod
INSERT INTO {$tabela[0]} VALUES({$query}) ON DUPLICATE KEY UPDATE;

nie zamieniają wartości sad.gif

zgadza się ilość kolumn (chyba):
  1. <?php
  2. for( $i = 0, $cnt = count($zawartosc); $i <= $cnt; $i++)
  3.        {
  4.        if($i < $cnt)
  5.            {
  6.        $query .= "'".addslashes($zawartosc[$i])."', ";
  7.            }
  8.            else
  9.            {
  10.                $query .= "'".addslashes($zawartosc[$i])."'";
  11.            }
  12.  
  13.        }
  14.        if(!$zawartosc = mysqli_query($db, "INSERT INTO {$tabela[0]} VALUES({$query}) ON DUPLICATE KEY UPDATE;"))
  15.    {
  16.            echo "INSERT INTO {$tabela[0]} VALUES({$query}) on duplicate key update;<br />";
  17.        $info["error"][] = "<br />Błąd bazy danych (".mysqli_errno($db)."): ".mysqli_error($db)."$query<br />$tabela[0]<br />";
  18.    }
  19.    }
  20. ?>


hmm tak jakby próbowalo wsadzić kilka z zapytań wo wszystkich tabel. Nie mogę znaleźć błędu sad.gif
Kurde jak pobrać dane z jednej tabeli i potem je w ją wsadzić w tej samej kolejności sad.gif (tzn kolejność kolumn)
przykładowy błąd:
Kod
string(223) "<br />B��d bazy danych (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1'0', '0', '',

i jest on przy kilku tabelach.
potem zmienia sie na inny przy kilku innych tabelach.

Ten post edytował tosiek 19.07.2009, 13:44:23


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





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A może byś tak podał strukturę?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


To miało być uniwersalne niezależne od tabel, bazy etc.

Testuje to na bazie od phpBB 2 by przemo


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nieważne, co miało być - najpierw trzeba rozpatrzeć konkretny przypadek.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


Kod
Blad bazy danych (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1'0', '0', '', ''
phpbb_adv_person

Zapytanie SQL: SELECT * FROM `phpbb_adv_person`;
Rekordów: 1
user_id person_id person_ip
0 0

Ten post edytował tosiek 21.07.2009, 18:53:06


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Yyyy, i to dla tego zapytania wywala...?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #9





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


wywala dla:
Kod
INSERT INTO phpbb_adv_person VALUES('0', '0', '', '') on duplicate key update;

ehh skrypt wysypuje się chyba przy jakiejkolwiek pustej kolumnie w wierszu, tylko nie wiem czemu. Bo jeśli przy pustej to czemu jest o jedna więcej w insercie ;/


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A samo insert into bez update'u działa?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


Nie bo są tylko 3 kolumny:
user_id person_id person_ip

A o select tej tabeli i przejściu przez skrypt wyżej chce wciskać 4 ;/ Jest jeden wpis dla tej tabeli, z czego person_ip jest puste.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nie bo są tylko 3 kolumny:
user_id person_id person_ip

To może po prostu podaj wstawiane wartości...?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tosiek
post
Post #13





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


podawałem, podawałem winksmiley.jpg ale to przez count, bo count nie liczy od 0 winksmiley.jpg

teraz zacząłem sprawdzać czy kolumna jest liczbą:
  1. <?php
  2. if (!$lista_tabel = mysqli_query($db, 'SHOW TABLES;')) {
  3.    $info['error'][] = 'Błąd bazy danych ('.mysqli_errno($db).'): '.mysqli_error($db);
  4. }
  5. else {
  6.    $info['ok'][] = 'Pobrano listÄ™ tabel';
  7. }
  8. while($tabela = mysqli_fetch_row($lista_tabel)) {
  9.    if(!$zawartosc = mysqli_query($db, 'SELECT * FROM '.$tabela[0].';')) {
  10.    $info['error'][] = 'Błąd bazy danych ('.mysqli_errno($db).'): '.mysqli_error($db);
  11.    }
  12.    else {
  13.    $info['ok'][] = 'Pobrano tabele: {$tabela[0]}';
  14.    
  15.    $fields = array();
  16.    while($field = mysqli_fetch_field($zawartosc)) {
  17.        $fields[$field->name] = in_array(strtolower($field->type), array(1, 2, 9, 3, 8)) ? TRUE : FALSE;
  18.    }
  19.    while($zawartosc2 = mysqli_fetch_assoc($zawartosc)) {
  20.        $rows[] = $zawartosc2;
  21.        
  22.    }
  23.    $tmp = array();
  24.    foreach($rows as $row=>$val) {
  25.        if($val === NULL) {
  26.        $tmp[] = 'NULL';
  27.        }
  28.        elseif($fields[$row] == TRUE) {
  29.        $tmp[] = $val;
  30.        }
  31.        else {
  32.        $tmp[] = '"'.$val.'"';
  33.        }
  34.    }
  35.    
  36.    
  37.    if(!$zawartosc = mysqli_query($db, 'INSERT INTO '.$tabela[0].' VALUES('.implode(', ', $tmp).')ON DUPLICATE KEY UPDATE;')) {
  38.        echo 'INSERT INTO '.$tabela[0].' VALUES('.implode(', ', $tmp).')ON DUPLICATE KEY UPDATE;<br />';
  39.        $info['error'][] = '<br />Błąd bazy danych ('.mysqli_errno($db).'): '.mysqli_error($db).'<br />';
  40.    }
  41.    }
  42. ?>


ale teraz nie wiem czemu zwraca mi:
INSERT INTO phpbb_adv_person VALUES("Array")ON DUPLICATE KEY UPDATE;

czemu implode zwraca tablice :|


--------------------
Go to the top of the page
+Quote Post
Darti
post
Post #14





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


  1. <?php
  2. $tmp = array();
  3.   foreach($rows as $row) {
  4.   foreach($row as $key=>$val){
  5.       if($val === NULL) {
  6.       $tmp[] = 'NULL';
  7.       }
  8.       elseif($fields[$row] == TRUE) {
  9.       $tmp[] = $val;
  10.       }
  11.       else {
  12.       $tmp[] = '"'.$val.'"';
  13.       }
  14.   }
  15. }
  16. ?>


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
tosiek
post
Post #15





Grupa: Zarejestrowani
Postów: 142
Pomógł: 0
Dołączył: 7.07.2008

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


małe poprawki i działa biggrin.gif zapomniałem że tamta tablica zawiera podtablice biggrin.gif
  1. <?php
  2. foreach($rows as $row) {
  3.  foreach($row as $key=>$val){
  4.      if($val === NULL) {
  5.      $tmp[] = 'NULL';
  6.      }
  7.      elseif($fields[$key] == TRUE) {
  8.      $tmp[] = $val;
  9.      }
  10.      else {
  11.      $tmp[] = '''.$val.''';
  12.      }
  13.  }
  14. }
  15. ?>


Kod
INSERT INTO phpbb_advertisement VALUES('0', '0', '')ON DUPLICATE KEY UPDATE;

czemu sie wysypuje na takich zapytaniach :|

tak samo:
Kod
REPLACE INTO phpbb_advertisement VALUES('0', '0', '');

:|

to znaczy nadl sie sypie przy:
Warning: Illegal offset type in /home/tosiek/domains/tosiek.pl/public_html/koderek/converter.php on line 46

elseif($fields[$row] == true) {

Ten post edytował tosiek 26.07.2009, 22:21:57


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Strzelam, że jako klucz podajesz inną tablicę...


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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: 20.08.2025 - 18:52