[PHP & MySQL] Regels in andere DB

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Hallo,

Ik zoek een manier/script om met PHP (mag ook perl o.i.d. zijn trouwens) om bepaalde regels uit een bepaalde database in een andere database te plakken. Dus gewoon verplaatsen zegmaar. Nu kan dit wel met een while, maar dan moet ik steeds opnieuwe connecten, en dit vindt mijn server niet zo leuk. Dus nu is mijn vraag eigelijk of het mogelijk is om met 2 databases tegelijk verbonden te zijn, en zo bepaalde regels te verplaatsen. Ik ben al aardig handig met PHP, dus dat is geen probleem.

Alvast hartelijk bedankt, SAPlayer

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
Als je gewoon op php.net de functielijst er bij pakt is dat wel HEEL makkelijk te vinden.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Verwijderd

Eerst alles uit 1 database ophalen, en dan alles in de andere wegschrijven? Maar je kan inderdaad ook met 2 databases verbonden zijn: http://nl2.php.net/function.mysql-connect

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
offtopic:
In een database hebben we het niet over regels maar over records ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Mysql heeft het geloof ik alleen maar over rows en fields. :?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

En daarnaast: wat heb je nu zelf al geprobeerd? Wat lukte daar niet mee? kreeg je foutmeldingen? Zo ja, welke? Records inlezen en wegschrijven is een redelijke basiskennis te noemen van PHP en MySQL en is dan ook in menig tutorial te vinden. Ik kan me dan ook niet voorstellen dat je nog niks zelf hebt geprobeerd.

Zie ook Programming Beleid - De Quickstart.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik had geen idee hoe ik het werkende kon krijgen, eerst alles uit de DB halen en later invoeren lukte me op de een of andere manier niet, en leek me erg omslachtig. Op php.net zie ik het niet (duidelijk) staan hoe je met 2 databases tegelijk verbonden kan zijn, dus probeerde ik het volgende:

code:
1
2
3
4
5
6
7
8
9
<?php
mysql_connect('localhost', 'user1', 'pass1') or die("Unable to connect to the requested database, MySQL returned: ".mysql_error());
mysql_select_db('db1') or die("Unable to select the requested database. MySQL returned:: ".mysql_error());

mysql_connect('localhost', 'user2', 'pass2') or die("Unable to connect to the requested database, MySQL returned: ".mysql_error());
mysql_select_db('db2') or die("Unable to select the requested database. MySQL returned:: ".mysql_error());

mysql_query ("INSERT INTO db2.tabel2 SELECT * FROM db1.tabel1");
?>


hierbij kreeg ik de volgende error:

code:
1
2
Warning: mysql_connect(): Access denied for user 'user2'@'localhost' (using password: YES) in /home/theschoo/public_html/try.php on line 5
Unable to connect to the requested database, MySQL returned:


achter returned staat niets, dus ik weet niet wat de fout is, wachtwoorden zijn 100% zeker weten goed, dus het moet iets anders zijn.

SAplayer

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ten eerste zie ik toch duidelijk in de handleiding staan dat mysql_connect een resourceid terug geeft. Verder is ook keurig te zien dat je bij mysql_select_db en mysql_query dezelfe resourceid mee kunt geven. Op die manier kun je beide connecties uit elkaar houden.

De foutmelding die je daar post is daarintegen ook heel duidelijk en heeft niks met je 'verbinden met 2 db's tegelijk' probleem te maken. Die gebruiker mag niet inloggen of je hebt het verkeerde wachtwoord gebruikt.

Je kunt trouwens niet 2 connecties combineren in 1 query. Je zult gewoon een select moeten doen op de ene connectie en vervolgens tijdens het uitlezen inserts uitvoeren op de andere connectie.

[ Voor 16% gewijzigd door Janoz op 07-09-2006 21:58 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Juist. Het connecten lukt me nu, maar ik snap niet wat ze op php.net bedoelen met die link identifier. Hoe kan ik nu bij de query aangeven in welke database deze uitgevoerd moet worden?

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
Verwijderd schreef op donderdag 07 september 2006 @ 22:12:
Juist. Het connecten lukt me nu, maar ik snap niet wat ze op php.net bedoelen met die link identifier. Hoe kan ik nu bij de query aangeven in welke database deze uitgevoerd moet worden?
Dat staat in de manual, de link identifier opslaan als je connect (allebij dus), en dan als 2e argument van de query functie de link identifier meegeven.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Verwijderd

Topicstarter
Ok :D het begint te werken. de queries lukken nu. Nu moet ik alleen alles nog handig in de andere DB kunnen proppen, en volgensmij heeft MySQL geen functie om een rij te kopieren en in te voegen. Dus moet ik creatief zijn met PHP. Ik gebruik nu mysql_fetch_row($selecteerquery) om de waarden in een array te laden. Maar hoe krijg ik nu handig de waarden uit deze array weer in de nieuwe table, met dezelfde structure?

SAplayer

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Zoek gewoon eens in de MySQL manual of pak google er eens bij?
SELECT INTO, SHOW CREATE,CREATE TABLE, INSERT, UPDATE etc., staan handige zaken bij

offtopic:
Kap overigens eens met je naam overal onder te zetten, die staat ook al naast je post ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • GlowMouse
  • Registratie: November 2002
  • Niet online
In je post van 21:53 connecte je 2x naar localhost en wou je "INSERT INTO db2.tabel2 SELECT * FROM db1.tabel1" uitvoeren. Het is een misverstand dat je daar twee verbindingen voor nodig hebt; dat is alleen het geval voor als de databases op verschillende machines staan. Waarom zou je niet deze query gebruiken ipv dit met PHP af te handelen?
Maar hoe krijg ik nu handig de waarden uit deze array weer in de nieuwe table, met dezelfde structure?
Met de waarden uit die array INSERT-queries maken.

Verwijderd

Topicstarter
In je post van 21:53 connecte je 2x naar localhost en wou je "INSERT INTO db2.tabel2 SELECT * FROM db1.tabel1" uitvoeren. Het is een misverstand dat je daar twee verbindingen voor nodig hebt; dat is alleen het geval voor als de databases op verschillende machines staan. Waarom zou je niet deze query gebruiken ipv dit met PHP af te handelen?
Deze query is alleen als SQL te gebruiken in phpMyAdmin (o.i.d.) volgensmij, maar het script moet automatisch gedraaid kunnen worden als cronjob.
Zoek gewoon eens in de MySQL manual of pak google er eens bij?
SELECT INTO, SHOW CREATE,CREATE TABLE, INSERT, UPDATE etc., staan handige zaken bij
Hier heb ik al even op gezocht, maar het enigste wat ik tegenkom zijn SQL queries, die niet in PHP te gebruiken zijn omdat het in tweeen moet, omdat ik 2 databases gebruik

code:
1
2
SELECT * INTO Persons_backup
FROM Persons

is bijvoorbeeld niet in mijn geval te gebruiken.
offtopic:
Kap overigens eens met je naam overal onder te zetten, die staat ook al naast je post ;)
offtopic:
sorry, ik was net aan het afleren om niet overal ook nog eens 'alvast bedankt' onder te zetten :P

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op donderdag 07 september 2006 @ 23:21:
[...]
Deze query is alleen als SQL te gebruiken in phpMyAdmin (o.i.d.) volgensmij, maar het script moet automatisch gedraaid kunnen worden als cronjob.
phpMyAdmin is slechts een schil. De queries die het uitvoert kun jij met PHP ook gewoon uitvoeren. Ik denk dat het voor jou de moeite loont je in SQL te verdiepen als je hieraan twijfelt.
code:
1
2
SELECT * INTO Persons_backup
FROM Persons
Om te kijken waarom dat fout gaat, kun je kijken naar mysql_error(). Let maar op:
PHP:
1
2
3
4
// hier moet je zelf zorgen dat je naar MySQL verbindt

$query = 'SELECT * INTO Persons_backup FROM Persons';
mysql_query($query) or die(mysql_error());

Op die manier zie je waarom een query niet goed uitgevoerd wordt. In dit geval is de syntaxis (geheel) verkeerd.

[ Voor 35% gewijzigd door GlowMouse op 07-09-2006 23:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ GlowMouse

SELECT * FROM db1.tabel INSERT INTO db2.tabel

werkt in phpMyAdmin perfect als ik deze als SQL uitvoer, maar in PHP krijg ik hem niet aan het werk. ik heb al geprobeerd om hem in twee querys te verdelen, maar ook dit werkt niet.

Als ik deze query als volgt uitvoer:
code:
1
2
$eerste = ("SELECT * FROM theschoo_tsc.pb INSERT INTO theschoo_history.pb");
mysql_query ($eerste, $db2) or die ( mysql_error( ) );

krijg ik de volgende error:
code:
1
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 'INSERT INTO db2.tabel' at line 1


ik snap er niets meer van ;(

Acties:
  • 0 Henk 'm!

  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

// maak connectie, forceren zelfs
$link1 = mysql_connect('localhost', 'user', 'pass', true);
mysql_select_db('db1', $link1);

// maak tweede connectie, ook forceren
$link2 = mysql_connect('localhost', 'user', 'pass', true);
mysql_select_db('db2', $link2);

$result = mysql_query('SELECT * FROM table', $link1);
while ($row = mysql_fetch_assoc($result))
{
      // yaaarrr insert ofzo
      mysql_query('INSERT INTO table (yaar, foo, bar) VALUES ("Foo", "Bar", "Yaaarrrr")', $link2);
}

mysql_close($link1);


zoiets
mysql_close($link2);

0x7F


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Of maak gebruik van objecten, dan heb je deze problemen niet.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Hacku schreef op vrijdag 08 september 2006 @ 15:49:
Of maak gebruik van objecten, dan heb je deze problemen niet.
Eeh.. gebruik maken van objecten lost dit op welke manier automagisch voor je op? Leg eens uit als je wilt?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op vrijdag 08 september 2006 @ 15:23:
@ GlowMouse

SELECT * FROM db1.tabel INSERT INTO db2.tabel

werkt in phpMyAdmin perfect als ik deze als SQL uitvoer, maar in PHP krijg ik hem niet aan het werk. ik heb al geprobeerd om hem in twee querys te verdelen, maar ook dit werkt niet.
[..]
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 'INSERT INTO db2.tabel' at line 1
[..]
ik snap er niets meer van ;(
Dit betekent dat je query niet goed is. Dezelfde query zal via phpMyAdmin ook niet werken, dus ik denk dat je iets over het hoofd ziet.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Creepy schreef op vrijdag 08 september 2006 @ 17:05:
[...]

Eeh.. gebruik maken van objecten lost dit op welke manier automagisch voor je op? Leg eens uit als je wilt?
Het was eerder als antwoord op Tepel bedoeld (zie post boven mij).

PHP:
1
2
$conn1 = new PDO(); // db1
$conn2 = new PDO(); // db2


Lijkt me gewoon een stuk handiger / overzichtelijker.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Ik snap nog steeds niet wat je bedoelt met "problemen" aangezien je toch ergens die MySQL code moet hebben. Of dat nu ergens in een object zit weggestopt of niet maakt natuurlijk niet zo veel uit/

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Laatst online: 16:24
Je query is "SELECT * FROM theschoo_tsc.pb INSERT INTO theschoo_history.pb" maar moet wezen "INSERT INTO theschoo_history.pb SELECT * FROM theschoo_tsc.pb", net andersom dus.

There are 10 kinds of people in the world: those that understand binary and those that don't

Pagina: 1