MySQL-Verbindung beenden, notwendig? |
FrediL
Fachidiot Threadstarter
Beiträge: 101 |
Hallo!
Ich habe in letzter Zeit eine PHP Scripte geschrieben, die auf MySQL zugreifen. Da ich in beiderlei hinsicht noch Anfänger bin, frage ich mich in letzter Zeit, ob man diese Verbindungen eigentlich auch wieder schließen muss. Oder ob man da sonst irgendwas noch machen muss. Cach löschen oder so.
Anlass der Fragen sind häufige Aussetzer in letzter Zeit bei Anfragen an den Server.
Als Antwort kommt da oftmals: "Lost connection to MySQL server during query"
Woran kann das liegen?
Vielen Dank im Voraus
FrediL
---
ergebniswelt.com -> Fußballergebnisse und mehr
|
 Profil
Website
Editieren
Zitieren
|
Marcus
Forenheld
Beiträge: 880 |
keine Ahnung ob dir das weiterhiilft, hab mal auf die schnelle Google bemüht:
The only thing I was able to find was a very long bugzilla thread regarding this problem under RedHat. Seems there is a bad glibc that causes this problem.
There were certain update fixes that needed careful following. If this is your case, check out this link: [1]
Seems the quickest temporary fix was to add the host name to your /ect/hosts file so that mysql doesn't try to use DNS to resolve the host name to ip. Otherwise it always works if the host name was 127.0.0.1. |
[1]: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=76631
bzw.
Gruß
Marcus
Diese Nachricht wurde geändert von: Marcus |
 Profil
E-Mail
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
Man muss sie nicht schließen, normale Verbindungen werden nach der Ausführung des Script wieder beendet. Ich würd allerdings sagen, dass es besserer Stil ist, sie im Script zu beenden. Aber nötig ist es nicht...
---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
FrediL
Fachidiot Threadstarter
Beiträge: 101 |
Otherwise it always works if the host name was 127.0.0.1. |
Also kann es durchaus daran liegen, dass die PHP-Anfragen von einem anderen Server (1&1) kommen? Denn die Datenbank ist bei hosteurope.
---
ergebniswelt.com -> Fußballergebnisse und mehr
|
 Profil
Website
Editieren
Zitieren
|
Marcus
Forenheld
Beiträge: 880 |
Das könnt sein. Aber andererseits scheints ja ab und zu zu funktionieren.
|
 Profil
E-Mail
Editieren
Zitieren
|
NetDrag
Foren-Team
Beiträge: 442 |
Das mysql connect schließt die verbindung zur Datenbank und gibt ressourcen frei. Es ist also nicht nur besserer Stil.
Dein Problem scheint eher in der Verbindung zum Server zu liegen als in PHP. Wie schaut denn das Verbindungs-PHP-Script aus?
---
We are born wet, naked and hungry, then things got worse!
|
 Profil
Website
Editieren
Zitieren
|
FrediL
Fachidiot Threadstarter
Beiträge: 101 |
Also wenn du den Teil meinst, mit dem ich die Daten abfrage, der sieht so aus wie immer. Da hatte ich eigentlich noch nie Probleme mit. Aber ich poste Ihn natürlich gerne einmal und bin offen für Verbesserungsvorschläge:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56: | //content auswählen bzw. zuweisen
if(!isset($content))
$content = "0";
else $content = $_GET["content"];
//datenbank-verbindung auswählen
$db_connection = mysql_connect('server002.webpack.hosteurope.de','[i]user[/i]','[i]passwort[/i]') or die(mysql_error());
mysql_select_db("[i]datenbank[/i]", $db_connection);
//content auswählen
$query_axel_enke_content = "SELECT nummer, titel, text FROM axel_enke_content WHERE nummer='$content' AND online='ja' LIMIT 1";
$result_axel_enke_content = mysql_query($query_axel_enke_content, $db_connection) or die(mysql_error());
//axel_enke_linklist auswählen
$query_axel_enke_linklist = "SELECT schluesselwoerter, link, art FROM axel_enke_linklist";
$result_axel_enke_linklist = mysql_query($query_axel_enke_linklist, $db_connection) or die(mysql_error());
//content abfragen
$row = mysql_fetch_assoc($result_axel_enke_content);
$text = $row["text"];
$titel = $row["titel"];
//umlaute umformen
$text = htmlentities($text);
//daten abfragen und mit axel_enke_content vergleichen
while ($db_link = mysql_fetch_array($result_axel_enke_linklist)) {
if ($db_link['art'] == 'intern'){
$schluesselwort = $db_link['schluesselwoerter'];
$schluesselwort = htmlentities($schluesselwort);
$text = str_replace($schluesselwort,''.$schluesselwort.'',$text);
}
else {
$schluesselwort = $db_link['schluesselwoerter'];
$schluesselwort = htmlentities($schluesselwort);
$text = str_replace($schluesselwort,''.$schluesselwort.'',$text);
}
}
//text auf ubb-code überprüfen
$x1=$text;
$x2="";
while($x1!=$x2){
$x2=$x1;
$x1=preg_replace("/\[([bui])\](.+)\[\/\\1\]/iU","<$1>$2$1>",$x1);
}
$text = $x1;
//daten ausgeben
echo nl2br($text); |
Ich denke eigentlich auch nicht, dass bei den Anfragen zu viele Daten gesendet werden. Das ist nur ein kurzer Text und einige Wörter, die überprüft werden und ggf. durch Links ersetzt werden.
Ist da vielleicht irgendwo ein Fehler in dem Code?
Vielen Dank im Voraus
FrediL
---
ergebniswelt.com -> Fußballergebnisse und mehr
|
 Profil
Website
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
NetDrag schrieb am 22.06.2003 13:56
Das mysql connect schließt die verbindung zur Datenbank und gibt ressourcen frei. Es ist also nicht nur besserer Stil. |
mysql_connect schließt keine Verbindung zur Datenbank, sondern stellt eine her. Geschlossen wird sie mit mysql_close bzw. nach der Ausführung des Scripts!
Can
---
" S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
Philipp Gérard
Foren-Team
Beiträge: 1502 |
mysql_close wird automatisch nach beendigung des Scripts ausgeführt, da die DB-Verbindung - es sei denn, man verbindet via mysql_pconnect - am Ende des Scripts immer geschlossen wird. Das ist aber kein Argument gegen guten Sourcecode - mit mysql_close!
---
Arbeit ist das Feuer der Gestaltung. - Marx
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
Hab ich das nicht gesagt?
Wofür verwendet man eigentlich mysql_pconnect? Habe das in meinem Chat mal verwendet, damit ich nicht immer wieder öffnen muss, nur irgendwie kam es dann zu tausenden öffenen MySQL-Prozessen
---
" S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
NetDrag
Foren-Team
Beiträge: 442 |
Can schrieb am 22.06.2003 14:51
NetDrag schrieb am 22.06.2003 13:56
Das mysql connect schließt die verbindung zur Datenbank und gibt ressourcen frei. Es ist also nicht nur besserer Stil. |
mysql_connect schließt keine Verbindung zur Datenbank, sondern stellt eine her. Geschlossen wird sie mit mysql_close bzw. nach der Ausführung des Scripts!
Can |
Ja sorry Mysql close natürlich. Flüchtigkeitsfehler.
Klar wird mysql_close nach dem Skript ausgeführt nur je früher das passiert desto besser.
pconnect läßt die Verbindung am Leben. Nur muß die nachher auch wieder aufgefangen werden. Allerdings gibts da bessere externe Lösungen wie z.B. sqlrelay
---
We are born wet, naked and hungry, then things got worse!
|
 Profil
Website
Editieren
Zitieren
|