[PHP & MySQL] Huidige standaard db ophalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

ik maak een mysqli-object:
$link_test = new mysqli('localhost','root','passwd',NULL,NULL,'/var/mysql.sock');

nu zou ik van deze connectie de actieve databank willen uitlezen. Deze kan namelijk op de server door het mysql USE command door iemand anders geset zijn.

Ik wil dus niet eerst een query "SELECT DATABASE()" gaan uitvoeren om hierachter te komen.

Ik heb op php.net gezocht maar kan niks vinden.
thx

[ Voor 12% gewijzigd door Verwijderd op 27-03-2007 12:06 ]


Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Returns TRUE on success or FALSE on failure. Dient om een db te selecteren, niet om te tonen welke de standaard db is

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Volgens mij kan php niet zomaar weten wat de geselecteerde database is. Dit moet je namelijk speciaal vragen aan de sql server. En hoe: door een query ;)

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Verwijderd schreef op dinsdag 27 maart 2007 @ 12:04:
Hoi,

ik maak een mysqli-object:
$link_test = new mysqli('localhost','root','passwd',NULL,NULL,'/var/mysql.sock');

nu zou ik van deze connectie de actieve databank willen uitlezen. Deze kan namelijk op de server door het mysql USE command door iemand anders geset zijn.

Ik wil dus niet eerst een query "SELECT DATABASE()" gaan uitvoeren om hierachter te komen.

Ik heb op php.net gezocht maar kan niks vinden.
thx
Niet om het een of ander, maar elke keer dat mysqli_connect wordt uitgevoerd, wordt er een nieuwe connectie gemaakt hoor. Dus als iemand anders ergens USE gebruikt, zal jouw connectie zich dat aan zijn/haar achterwerk oxideren. ;)

[edit]
Klopt helemaal Zyppora :)

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 12-09 10:59

Zyppora

155/50 Warlock

Is het niet zo dat een actieve db 'per-session' oftewel 'per-connection' geldt? Als ik het volgende doe:

PHP:
1
2
3
4
5
$db1 = mysql_connect("localhost", "root", "");
$db2 = mysql_connect("localhost", "root", "");

mysql_select_db("A", $db1);
mysql_select_db("B", $db2);


Dan is voor de $db1 connection 'A' de actieve db, en voor $db2 'B'.
Maar correct me if I'm wrong, zo gebruik ik ze (overigens heb ik nog nooit in een situatie gezeten waarin ik twee connecties nodig heb gehad, dus dit is geen eerste-hands ervaring).

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

@Zyppora: Ja dat is zo. Er is geen database wide active database. Wat Erwin vraagt kan dus helemaal niet.

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


Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Sorry zie dat ik je vraag niet helemaal begreep. Maar kun je vertellen waarom je dit wil opvragen? Zoals hierboven wordt gezegd heb je meestal 1 database connectie open staan. Wanneer je meerdere connecties open hebt waarom zou je dan de database willen weten? Wanneer je data in twee databases staat kun je deze dan niet samen voegen? Of in dat geval zou je twee database connecties kunnen gebruiken.

Ik probeer te begrijpen waarom je dit wilt.

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Verwijderd schreef op dinsdag 27 maart 2007 @ 12:04:
ik maak een mysqli-object:
$link_test = new mysqli('localhost','root','passwd',NULL,NULL,'/var/mysql.sock');

nu zou ik van deze connectie de actieve databank willen uitlezen. Deze kan namelijk op de server door het mysql USE command door iemand anders geset zijn.
Die is er niet in dit geval. Er is per connectie een actieve database, en die is als je connect NULL.

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien niet precies wat je zoekt, maar met deze functie kan je de actieve processen laten zien, met de gegevens over de gebruikte database.
SQL:
1
mysql_list_processes($link_test);


mysql_list_processes

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
x-force schreef op dinsdag 27 maart 2007 @ 12:45:
Sorry zie dat ik je vraag niet helemaal begreep. Maar kun je vertellen waarom je dit wil opvragen? Zoals hierboven wordt gezegd heb je meestal 1 database connectie open staan. Wanneer je meerdere connecties open hebt waarom zou je dan de database willen weten? Wanneer je data in twee databases staat kun je deze dan niet samen voegen? Of in dat geval zou je twee database connecties kunnen gebruiken.

Ik probeer te begrijpen waarom je dit wilt.
Hoi,

sorry, daar zat ik dus even fout. Bij een nieuwe connectie is er inderdaad geen standaard database bekend. Ik zit alleen met hetvolgende: elke ochtend lees ik éénmalig grote xml-files in een mysql database. Voordat dit gebeurd maak ik eerst een duplicate van de database. Mocht er iets fout lopen, dan kunnen we altijd snel overschakelen naar de backup database (aangezien het inlezen van xml naar mysql wel een tijdje duurt). Wat ik dan ook wil is dat de website gaat draaien op de backup-database tijdens de inleesprocedure van xml naar mysql, zodat de website 100% live is.

Ik weet alleen niet hoe ik best kan zeggen dat ie tijdens de inleesprocedure (php, cronjob) kan zeggen dat hij automatisch connectie moet maken met de backupdatabase.

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Als je ergens een property set die aangeeft of de huidige of de backup gebruikt moet worden dan kun je dat in je php code gewoon uitlezen. Elk nieuw request kan dan de andere db gebruiken.

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


Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Verwijderd schreef op dinsdag 27 maart 2007 @ 13:14:
[...]


Hoi,

sorry, daar zat ik dus even fout. Bij een nieuwe connectie is er inderdaad geen standaard database bekend. Ik zit alleen met hetvolgende: elke ochtend lees ik éénmalig grote xml-files in een mysql database. Voordat dit gebeurd maak ik eerst een duplicate van de database. Mocht er iets fout lopen, dan kunnen we altijd snel overschakelen naar de backup database (aangezien het inlezen van xml naar mysql wel een tijdje duurt). Wat ik dan ook wil is dat de website gaat draaien op de backup-database tijdens de inleesprocedure van xml naar mysql, zodat de website 100% live is.

Ik weet alleen niet hoe ik best kan zeggen dat ie tijdens de inleesprocedure (php, cronjob) kan zeggen dat hij automatisch connectie moet maken met de backupdatabase.
Zoals gezegd kun je dan toch met twee database connecties werken?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$db1 = mysql_connect("localhost", "root", "");
$db2 = mysql_connect("localhost", "root", "");

mysql_select_db("live", $db1);
mysql_select_db("backup", $db2); 

// je xml parsen
mysql_query("insert xml query\'s", $db2 )

// data overzetten
$result = mysql_query("select *", $db2 )
while(){
  mysql_query("insert" , $db1 );
}


Ik weet niet hoe je exact te werk gaat maar this should do the trick

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 12-09 10:59

Zyppora

155/50 Warlock

Wat Janoz zegt:

Zorg ervoor dat je xml-update-script ergens een variabele set die je met de PROD scripts uitleest. In de PROD scripts wordt dan automagisch geschakeld naar de backup database. Nadat het xml-update-script afloopt, zet je de originele waarde van bovengenoemde variabele weer terug, en kunnen je PROD scripts weer vrolijk op de live db draaien.

Nu weet ik niet precies hoe dat bij MySQLi werkt, maar als er iets misgaat, is er dan niet de kans dat de hele MySQLi server platgaat? Dan heb je aan een backup-db ook niet veel meer, maar zul je moeten denken aan een backup-MySQLi-server.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zyppora schreef op dinsdag 27 maart 2007 @ 13:41:
Wat Janoz zegt:

Zorg ervoor dat je xml-update-script ergens een variabele set die je met de PROD scripts uitleest. In de PROD scripts wordt dan automagisch geschakeld naar de backup database. Nadat het xml-update-script afloopt, zet je de originele waarde van bovengenoemde variabele weer terug, en kunnen je PROD scripts weer vrolijk op de live db draaien.

Nu weet ik niet precies hoe dat bij MySQLi werkt, maar als er iets misgaat, is er dan niet de kans dat de hele MySQLi server platgaat? Dan heb je aan een backup-db ook niet veel meer, maar zul je moeten denken aan een backup-MySQLi-server.
Hoi,

begrijp ik het goed dat tijdens het draaien van het PROD script elke bezoeker connectie maakt met de backup server?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op dinsdag 27 maart 2007 @ 13:17:
Als je ergens een property set die aangeeft of de huidige of de backup gebruikt moet worden dan kun je dat in je php code gewoon uitlezen. Elk nieuw request kan dan de andere db gebruiken.
Wat er eigenlijk moet gebeuren is dat als de xml import draait, alle bezoekers even op de backup database moeten connecten. Als het script gedraaid is moeten alle bezoekers terug op de normale db connecten... dus als een bezoeker een pagina opent, hoe check ik dan of het script draait... vb een server variabele uitlezen ofzo?

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Je zou kunnen overwegen om die hele import in 1 grote SQL transactie te zetten. En verder is dit denk ik wel op te lossen door een config file weg te schrijven, en die in je code te gebruiken.

Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Ik zou zoiezo het importproces in een aparte database laten verlopen, en na een succesvolle import de "live" database droppen de de importdatabase te renamen. Een stuk eenvoudiger lijkt me?

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wacky schreef op woensdag 28 maart 2007 @ 00:36:
Ik zou zoiezo het importproces in een aparte database laten verlopen, en na een succesvolle import de "live" database droppen de de importdatabase te renamen. Een stuk eenvoudiger lijkt me?
Ja, ok maar je kan toch niet zomaar even met een commando de database renamen, wel?
Dan moet je volgens mij alle tabellen ook opnieuw terug opbouwen dacht ik, of ben ik verkeerd?

Edit: thanks, ik wist niet dat vanaf mysql 5.1.7 de RENAME DATABASE mogelijkeid er was

[ Voor 9% gewijzigd door Verwijderd op 28-03-2007 09:44 ]

Pagina: 1