![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam takie bazy: Baza nr 1 ORACLE tabela1: numer_zlecenia, uwagi Baza nr 2 MYSQL tabela2: nr_zlec, uw Chciałbym za pomocą polecenia PHP skopiować dane z oracle do mysql. Domyślam się, że najpierw łącze się z bazami a potem muszę zrobić insert i tu jest problem. Kod <?php $dbh1 = new PDO('mysql:host=localhost;dbname=mysql', 'logn', 'haslo'); $dbh2 = new PDO('oci:host=199.199.9.99;dbname=oracle', 'login', 'login'); ?> odczytac dane z oracla moge tak: Kod $stmt2 = $dbh2->prepare("SELECT numer_zlecenia, uwagi FROM tabela1 "); $stmt2->execute(); $arrValues2 = $stmt2->fetchAll(PDO::FETCH_ASSOC); Pytanie jak poprawnie zrealizowac: Kod mysql_query('INSERT INTO MYSQL.tabela2(nr_zlec, uw) select numer_zlecenia, uwagi from ORACLE.tabela1') Pozdrawiam i liczę na pomoc |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za podpowiedz, ale sęk w tym, że łączę się przez PDO i dlatego nie wiem jak wykonać operację dalej. We wskazanym przykładzie obie bazy to mysql.
Proszę o inne propozycje. |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Przeciez dostales rozwiazanie od poprzednika.... Pobierasz rekordy z jednej bazy i wkladasz odzielnym zapytaniem do drugiej. To wlasnie masz zrobione w kodzie co dostales wczesniej...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, za pomoc.
Dalej jednak mam problem. Pierwszy problem to na pewno zły warunek w pętli bo nie wykonuje INSERT. Co mam nie tak? Funkcji mysql_fetch_object wykorzystanej w podesłanym rozwiązaniu nie mogę używać, potrzebuję czegoś i do oracla i mysql stąd PDO, które kuleje u mnie bardzo. Kod $dbh2 = new PDO('oci:host=19999;dbname=baza2', 'login', 'haslo'); $stmt2 = $dbh2->prepare("SELECT numer_zlecenia FROM tabela2"); while ($data = $stmt2->fetchObject()){ $var1 = $data->numer_zlecenia; $dbh1 = new PDO('mysql:host=localhost;dbname=baza1', 'login', 'haslo'); $sql = "INSERT INTO tabela1 (nr_zlec) VALUES (':wart')"; $x = $dbh1->prepare($sql); $x->execute(array(':wart'=>$var1)); } |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
VALUES (':wart')";
Wartosci bindowanych w nic sie nie bierze, czyli tak ma byc VALUES (:wart)"; Poza tym jesli nadal ci nie bedzie dodawac, znaczy ze jest jakis blad bazy. Wyswietl go to bedzie wiadomo o co chodzi |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Póki co straszy Notice: Undefined property: stdClass::$numer_zlecenia.
szukam co pochrzaniłem.. |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
zamiast fetchObject uzywaj FETCH assoc i dobieraj sie do rekordu jak do zwyklej tablicy.
Poza tym miales wyswietlic blad bazy a tego nie robisz. To co podales to blad php. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Błąd bazy hmm, ale ja nie mam błędu bazy..tak mi się wydaje PDOException przynajmniej nic nie wyświetla. Jak inaczej mogę te błędy zobaczyć (IMG:style_emoticons/default/worriedsmiley.gif)
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
To zalezy, czy wlaczyles, by PDO plułą wyjątkiem przy bledzie czy nie. Jak nie wlączyles, to PDO nie bedzie plulo ci błędem.
Zajrzyj do manuala do dzialu PDO. Tam masz podaną funkcją, ktora wyswietla ostatni bląd bazy. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie ..musiałem wykasować sobie linijkę ...
Było Array ( [0] => Array ( [file] => D:\xampp\htdocs\x\kop_tabel.php [line] => 12[function] => fetchObject [class] => PDOStatement [type] => -> [args] => Array ( ) ) ) Jest Array ( [0] => Array ( [file] => D:\xampp\htdocs\x\kop_tabel.php [line] => 12 [function] => fetchAll [class] => PDOStatement [type] => -> [args] => Array ( [0] => 2 ) ) ) Ten post edytował diodadioda 24.10.2014, 13:56:07 |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Wyjatki plują komunikatem bledu, a Twoj "wyjątek" jakos nie wyplul komunikatu bledu... Jestes pewien ze poprawnie go uzyles?
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
No nie wiem po połaczeniach dołożyłem linijkę
$dbh1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); a poźniej i $dbh2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); catch(PDOException $e) { print_r( $e->getTrace() ); } a jak prawidłowo należałoby to zrobić? |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
print_r( $e->getTrace() ); - to jest wyswietlenie sciezki a ty masz wyswietlic komunikat bledu.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Kolejny dzień, kolejna walka:
SQLSTATE[HY000]: General error: 1002 OCIStmtFetch: ORA-01002: fetch out of sequence (ext\pdo_oci\oci_statement.c:475)HY000 |
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki (IMG:style_emoticons/default/smile.gif)
kod wyglada tak: Kod <?php try{ $dbh2 = new PDO('oci:host=188.188.7.88;dbname=test', 'log', 'haslo'); $dbh2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt2 = $dbh2->query("SELECT numer_zlecenia FROM zlecenia_produkcyjne"); $stmt2->execute(); //$data = $stmt2->fetchAll(PDO::FETCH_ASSOC); $dbh1 = new PDO('mysql:host=localhost;dbname=baza1', 'log1', 'haslo'); $dbh1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); while ($data = $stmt2->fetchAll(PDO::FETCH_ASSOC)){ $variable1 = $data->numer_zlecenia; $sql = "INSERT INTO zlecenia_carbo (nr_zlec) VALUES (:wart)"; $q = $dbh1->prepare($sql); $q->execute(array(':wart'=>$variable1)); } $stmt2 -> closeCursor(); //wyswietlanie tabeli oracle /* foreach ($data as $row2){ foreach ($row2 as $key2 => $val2){ print "$val2"; } print "\n"; } */ } //bledy catch(PDOException $e) { print_r( $e->getTrace() ); print_r( $e->getMessage() ); print_r( $e->getCode() ); } ?> Ewidentnie źle pobieram dane. Jak zakomentuje petle i $data = $stmt2->fetchAll(PDO::FETCH_ASSOC) wyrzuce przed nią to tablice mi wyswietla bez problemu. Póki co to: Notice: Trying to get property of non-object in D:\xampp\htdocs\x\kop_tabel.php on line 15 Array ( [0] => Array ( [file] => D:\xampp\htdocs\x\kop_tabel.php [line] => 18 [function] => execute [class] => PDOStatement [type] => -> [args] => Array ( [0] => Array ( [:wart] => ) ) ) ) SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nr_zlec' cannot be null23000 Google oczywiście sprawdzałem, ale już jestem tak zamotany ze robie błąd za błędem.. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Pobierasz dane jako tablicę asocjacyjną a nie obiekt więc $data['numer_zlecenia'] |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki. Teraz mam :
Notice: Undefined index: numer_zlecenia in D:\xampp\htdocs\x\kop_tabel.php on line 15 Array ( [0] => Array ( [file] => D:\xampp\htdocs\x\kop_tabel.php [line] => 18 [function] => execute [class] => PDOStatement [type] => -> [args] => Array ( [0] => Array ( [:wart] => ) ) ) ) SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nr_zlec' cannot be null23000 :/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 10:42 |