mysql og link_identifier?

clinton4

Medlem
Hei, jeg finner ingen eksempler på hvordan jeg bruker link_identifier i denne linken. Mulig jeg forklarte meg litt dårlig, så jeg prøver heller å forklare problemstillingen jeg har.

Jeg har et system som potensielt kan utføre flere hundre mysql_query's i minuttet. Jeg skal utføre en spørring, og basert på mysql_affected_rows skal jeg utføre en handling.

php.net skrev:
link_identifier:
The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.

Hvis jeg tolker beskrivelsen fra php.net riktig, vil mysql_affected_rows retunere svar fra den siste spørringen som ble utført.

Si at jeg ikke bruker link_identifier, hva vil mysql_affected_rows retunere hvis det i mellomtiden blir utført en annen spørring i en annen php fil?

Jeg lurer også på hva jeg skal plassere i $link_identifier? Skal jeg selv lage et unikt referanse nummer? Eller gjør mysql dette selv?
 

clinton4

Medlem
F.eks:

PHP:
<?php
include('dbconnect.php');

mysql_query("INSERT INTO test1 (blabla) VALUES ('blabla')");

// La oss si at det nå oppstår en annen spørring i en annen php fil før mysql_affected_rows nedenfor blir kjørt.

if(mysql_affected_rows() == 1){
	// Utfør en handling
}

// Vil da mysql_affected_rows retunere informasjon om spørringen ovenfor eller i den andre php filen? HUSK, jeg har ikke brukt noen link_identifier.
?>
 
Sist redigert:

drlinux

Konsulent i PHP og Linux
Ta en titt i dbconnect.php. Denne gjør nok en tilkobling til databasen med mysql_(p)connect().

mysql_(p)connect() returnerer en link variabel, men du trenger ikke referere til denne hvis du kun har en database tilkobling - den blri brukt som standard.

Men, hvis du alliekvel vil refere til den - det skader ikke og er god praksis, så gjør du det slik;

PHP:
$link = mysq_pconnect(...);

mysql_query("...", $link);

Se PHP: mysql_query - Manual for mer dokumentasjon
 

clinton4

Medlem
Når vi er inne på mysql_pconnect() og mysql_connect()

php.net skrev:
mysql_pconnect() acts very much like mysql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mysql_close() will not close links established by mysql_pconnect()).

1. Hvis ikke mysql_pconnect() blir lukket når scriptet er ferdig og ikke lukkes av mysql_close(), når og hvordan lukker man da en mysql_pconnect()?

2. Er det bare mysql_pconnect() som automatisk retunerer en link_identifier, eller gjør mysql_connect også det?

3. I hvilke tilfeller vil det være praktisk å opprette en persistent connection?

4. Jeg ser for meg at sjansen for problemer med to_many_connections ved bruk av mysql_pconnect() blir høyere, eller?
 
Sist redigert:

drlinux

Konsulent i PHP og Linux
Når vi er inne på mysql_pconnect() og mysql_connect()



1. Hvis ikke mysql_pconnect() blir lukket når scriptet er ferdig og ikke lukkes av mysql_close(), når og hvordan lukker man da en mysql_pconnect()?

2. Er det bare mysql_pconnect() som automatisk retunerer en link_identifier, eller gjør mysql_connect også det?

3. I hvilke tilfeller vil det være praktisk å opprette en persistent connection?

4. Jeg ser for meg at sjansen for problemer med to_many_connections ved bruk av mysql_pconnect() blir høyere, eller?

1. Du lukker ikke mysql_pconnect(). Apache/PHP har en pool med persistent connections, som tilslutt vil lukkes når MySQL's connetion timeout nåes. Hva den er satt til avhenger av serverens oppsett.

2. mysql_connect() gjør det også

3. Det er i utgangspunktet alltid praktisk, siden det å gjennbruke en oppkobling er raskere en å opprette en ny.

4. Det er riktig, men med forbehold. Apache/PHP kan gjenbruke en forbindelse hvis den har samme signatur som den du ønsker, dvs. samme server og brukernavn. Hvis du er på et delt webhotell hvor det finnes mange brukere med hver sine brukernavn, så vil max_connections kunne nåes hvis server-admin ikke har satt en lav connection_timeout. Hvis du har din egen server hvor det bare er deg, så bør ikke det være et problem.

Hvis serveren er på localhost så er uansett kostnaden med å åpne ny forbindelse så lav, at det det ikke er et problem med å bruke mysql_connect().
 
Topp