[PHP] MySQL Verbindung zwischenspeichern

01/15/2015 12:30 Mr.Tr33#1
Moin,

gibt es eine Möglichkeit eine MySQL Verbindung zwischen zu speichern, also z.B. in einem Cookie?

Ich habe eine Seite wo ich Teil der Seite über jQuery nachlade. Die Sache dabei ist, dass jeder Teil eine Verbindugn zum MySQL Server aufbaut.
Ich weiß jetzt nicht ob das den ganzen Server verlangsammt, wenn ich z.B. 1000 Besucher in einem bestimmten Zeitraum habe die dann sich durch die Seite klicken.

MfG
Mr.Tr33
01/15/2015 13:29 KoKsPfLaNzE#2
im cookie geht das nicht, 1k requests pro minute oder sekunde musst dir gedanken machen.

wenn lw hast kannst dir [Only registered and activated users can see links. Click Here To Register...] angucken, bzw einfach mit einem caching arbeiten, wenn es sich anbietet.
01/15/2015 13:37 NotEnoughForYou#3
Wenn du auf PDO umsteigen würdest, könntest du das persistent ATTR setzen, dabei wird die DB Verbindung gecached und somit wieder schneller hergestellt.
01/15/2015 17:10 .Marcel'#4
Würde dir auch einen Umstieg auf PDO empfehlen.
01/15/2015 17:46 xEncounter#5
Mysql ist deprecated.

Wenn es nicht irgendwie Job- oder Schul-bedingt benutzt werden muss.
Rate ich dir wie die anderen, einen Umstieg auf PDO.
01/15/2015 17:48 devcode#6
Steht denn irgendwo explizit das er den mysql driver benutzt?
01/15/2015 18:07 Mr.Tr33#7
Quote:
Originally Posted by NotEnoughForYou View Post
Wenn du auf PDO umsteigen würdest, könntest du das persistent ATTR setzen, dabei wird die DB Verbindung gecached und somit wieder schneller hergestellt.
Klingt interessant.
Könntest du mir eventuell ein aussagekräftiges Beispiel mit einer Erklärung geben bitte? Habe PDO noch nicht benutzt und ich denke mal, dass ich bei meinem Projekt vermutlich darauf umsteigen werde :)
01/15/2015 18:10 Synatex#8
Infos dazu gibts in der offiziellen Doku:

[Only registered and activated users can see links. Click Here To Register...]

Die persistenten Verbindungen werden unter Punkt #4 angesprochen.

Eventuell wäre es mal interessant zu wissen was du genau vorhast und ob man nicht eine andere Art von Code-Struktur für dein Vorhaben nutzen kann.
01/15/2015 18:36 Mr.Tr33#9
Mir kam der Gedanke einfach so, da ich immer mehr jQuery benutze und mich fragte wie es den MySQL Server belastet zich verbindungen pro User aufzubauen.
01/15/2015 20:22 xEncounter#10
Code:
mysql_pconnect ([ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, int $client_flags = 0 ]]]] )

Habe mal die mysql_pconnect gefunden.
Verbessert die Perfomance mit einer persistent connection.
Irgendwie muss man das auch persistent setzen... Wollte nur mal erwähnen das es sowas gibt.
Kann sein dass das schon wieder deprecated ist. ^^
01/15/2015 20:26 NotEnoughForYou#11
Jo ist mittlerweile deprecated.

[Only registered and activated users can see links. Click Here To Register...]
01/15/2015 23:03 Mr.Tr33#12
Da wir ja jetzt eh PDO gelandet sind, kann ich mich auch hier ausfragen :D

So, was ist mit der Funktion mysql_real_escape_string? brauche ich sie gar nicht? oder muss ich es jetzt jedes mal mit prepare & execute machen? Ich mag den normalen $db->query befehl viel lieber :D, naja fürs erste :D

/Edit:
Ok ich habe es selbst ausprobiert und ohne manueles escapen oder prepare & execute komme ich nicht aus.
Was mich jetzt aber stört ist, dass ich nicht den zusammen gebauten Query anschauen kann, heißt was am Ende beim Server landet und verarbeitet wird.
01/16/2015 00:40 Synatex#13
Das wirst du in PHP mit den genutzten prepared Statements nicht erreichen können, da müsstest du normale Queries versenden.

Was bei den prepareds passiert:
Deiner Datenbank wird der Query geschickt, die Datenbank "baut" sich dann die dementsprechende Interpretation daraus, aber verarbeitet den Query noch nicht.

Sobald du dann eine Variable mit ranhängst bzw. eine bindest "ersetzt" die Datenbank nur die Variable und erhält auch nur die Variable. D.h. der Query im einzelnen wird eigentlich von der Datenbank verarbeitet, nicht von PDO.

Du müsstest den Query einfach vorher zusammenbauen bzw. dir eine extra Hilfsvariable für einbauen. Denn das was du willst, ist nicht vorhanden (dies ist jedoch auch nur bei den prepareds so, es gibt weiterhin auch noch die normalen Queries die man hier sehen kann: [Only registered and activated users can see links. Click Here To Register...]).

Falls du nur den prepared String sehen willst der abgeschickt wird kannst du im PDO prepare Objekt einfach die Variable "queryString" abfragen, die ist public.
01/16/2015 11:51 Mr.Tr33#14
Danke, aber bei normalen query kann ich ja leider die POSTs & GETs nicht escapen. Oder gibt es doch dafür ne Möglichkeit?
01/16/2015 13:17 Synatex#15
Was du machen könntest um deine ganzen Variablen zu escapen wäre einfach über das $_POST Array zu laufen.

PHP Code:
<?php

$params 
= array();

foreach(
$_POST as $key => $val) {
$params[$key] = DeineSecureFunktion($val);
}

?>
Bin mit dieser Praktik schon relativ lange unterwegs und die hatte mich bis dato auch noch nie im Stich gelassen. DU musst dann auch nicht mehr die Originalen Werte im $_POST Array bearbeiten sondern hast diese immer noch zur Verfügung falls sie benötigt werden.