Forum » Izdelava spletišč » PHP povezava z Mysql
PHP povezava z Mysql
snooze77 ::
Torej delam eno stran s pomočjo php. Stvar je sledeča. Ko kliknemo na neko stran npr. pridobi_studente se v kodi povežem z bazo in prikažem rezultate. Problem je,ker je čas povezovanja in pridobivanja podatkov iz baze počasen. Čas sem izmeril in mi je pokazalo 1,01s na sql. Stran imam zgrajeno na naslednji način:
Sql stavke imam v ločeni datoteki v funkcijah na ta način
Za connection in disconnection imam funkciji, ki jih v sql stavkih kličem.
Ni mi jasno zakaj tako počasna povezava. Uporabljam xampp, torej je vse localhost. Sem že probal, da ne bi klical funkcij ampak bi imel kodo kar na strani ampak so isti rezultati.
Mi lahko kdo pomaga?
Hvala
Sql stavke imam v ločeni datoteki v funkcijah na ta način
function PridobiStudente() { povezava(); $utf8="SET NAMES utf8"; mysql_query($utf8); $result = mysql_query("SELECT ime, priimek FROM studenti"); ConnectionClose(); return $result; }
Za connection in disconnection imam funkciji, ki jih v sql stavkih kličem.
Ni mi jasno zakaj tako počasna povezava. Uporabljam xampp, torej je vse localhost. Sem že probal, da ne bi klical funkcij ampak bi imel kodo kar na strani ampak so isti rezultati.
Mi lahko kdo pomaga?
Hvala
matic492 ::
Zakaj moraš vsakič dat na utf-8? če je velika baza ga mogoče celo to zavira, da celo bazo spremeni na utf-8?
carota ::
Kaj če bi najprej izmeril čas vsakega koraka, recimo čas potreben za izvedbo povezava(), za mysql_query($utf8), za $result..., za ConnectionClose()?
Ne vidimo kaj se zgodi v funkcijah povezava() in ConnectionClose();
Ne vidimo kaj se zgodi v funkcijah povezava() in ConnectionClose();
snooze77 ::
Baza ni tako velika, da bi ga to oviralo vsaj po mojem. To zato naredim, ker sem imel problem z š,č,ž in sem našel to kot rešitev. Imam v meta,php in bazo na utf-8 in mi niso delovali.
To sta ti dve funkciji.
Časi:
Torej največ mu vzame vzpostavitev povezave z bazo.
function povezava() { $con = mysql_connect("localhost","++++","++++"); if (!$con) { die('Could not connect: ' . mysql_error()); } else { mysql_select_db("ovks", $con); } } function ConnectionClose() { $con = mysql_connect("localhost","++++","+++++"); mysql_close($con); }
To sta ti dve funkciji.
Časi:
$msc=microtime(true); $con = mysql_connect("localhost","+++++","++++"); mysql_select_db("ovks", $con); $msc=microtime(true)-$msc; Čas:1,01s $msc=microtime(true); $utf8="SET NAMES utf8"; mysql_query($utf8); $msc=microtime(true)-$msc; Čas:0.0004s $msc=microtime(true); $result = mysql_query("SELECT naziv FROM predmeti"); mysql_close($con); $msc=microtime(true)-$msc; $msc=microtime(true); $result = mysql_query("SELECT naziv FROM predmeti"); mysql_close($con); $msc=microtime(true)-$msc; Čas:0.0004s
Torej največ mu vzame vzpostavitev povezave z bazo.
Zgodovina sprememb…
- spremenil: snooze77 ()
snooze77 ::
Mesar sem že probal to, kar piše v tem članku ubistvu sem našu podoben članek in mi ni delovalo. Ne vem zakaj ampak sem probal še enkrat in ugotovil, da sem prej pozabil v ConnectionClose funkciji zamenjat localhost z 127.0.0.1. Sedaj je dostop 0.002s s tem, da preberem tri različne stvari iz baze.
Hvala
Hvala
DeeJay ::
Šele zdej opazu... ti ne zapiraš povezave od povezava() ampak, pri ConnectionClose() še 1x odpreš povezavo in to zapreš. To je napačno. Zato ti povezave odprte ostajajo.
Spremenljivko $con dej izven funkcije in jo potem kot global uvozi v vsako funkcijo posebi:
Tko da sedaj samo kličeš:
Spremenljivko $con dej izven funkcije in jo potem kot global uvozi v vsako funkcijo posebi:
$con = isset ($con) ? $con : FALSE; function povezava() { global $con; if (!$con) { $con = mysql_connect("localhost","++++","++++") or die('Could not connect: ' . mysql_error()); mysql_select_db("ovks", $con); mysql_query("SET NAMES utf8"); } } function ConnectionClose() { global $con; if($con) { mysql_close($con) or die('Could not disconnect: ' . mysql_error()); $con = FALSE; } }
Tko da sedaj samo kličeš:
function PridobiStudente() { povezava(); $result = mysql_query("SELECT ime, priimek FROM studenti"); ConnectionClose(); return $result; }
Zgodovina sprememb…
- spremenil: DeeJay ()
DeeJay ::
Če pa hočeš, da nardi povezavo samo 1x na vrhu strani in jo potem sam zapre, ko neha izvajati kodo, pa lahko uporabiš tole funkcijo:
primer:
connect.php
index.php
register_shutdown_function('ConnectionClose');
primer:
connect.php
<?php $con = isset ($con) ? $con : FALSE; function povezava() { global $con; if (!$con) { $con = mysql_connect("localhost","++++","++++") or die('Could not connect: ' . mysql_error()); mysql_select_db("ovks", $con); mysql_query("SET NAMES utf8"); } } function ConnectionClose() { global $con; if($con) { mysql_close($con) or die('Could not disconnect: ' . mysql_error()); $con = FALSE; } } register_shutdown_function('ConnectionClose'); ?>
index.php
<?php include ('connect.php'); povezava(); $stud = mysql_query("SELECT ime, priimek FROM studenti"); while ($row = mysql_fetch_assoc($stud)) { echo $row['ime'], ' ' , $row['priimek'], '<br>'; } mysql_free_result($stud); ?>
4kik4 ::
Ali ti sicer baza dela hitro? Kaj pa v kakšnem drugem primeru, ali dela vedno počasi? Doma imam namreč server (na win7), in mi baza dela neverjetno počasi, in nevem, zakaj. Z isto kodo mi na najetem serverju to dela z normalno hitrostjo.
DeeJay ::
@4kik4 veliko je odvisno tudi od konfiguracije mysql serverja. Preveri kakšne imaš nastavitve my.cnf doma in na serverju. Seveda pa je odvisno tudi od samega računalnika (RAM, CPU, disk, ...)
Ziga Dolhar ::
Joj.
Ne tega delat. Imeti spremenljivko, ki je lahko različnih tipov ... je zelo, zelo slaba praksa. Imej dve ločeni spremenljivki.
$con = isset ($con) ? $con : FALSE; .. $con = mysql_connect("localhost","++++","++++")
Ne tega delat. Imeti spremenljivko, ki je lahko različnih tipov ... je zelo, zelo slaba praksa. Imej dve ločeni spremenljivki.
https://dolhar.si/
matic492 ::
Malo offtopic, sam jaz nisem nikol uporabljal tega connection close, kaj je razlika med tem in kako jaz delam:
database.php file:
In potem se v drugih filih include ta file in sql query se nardi z enim stavkom, recimo takole :
Bi billo bolje če zapiram povezavo?
database.php file:
$db_user = 'root'; $db_pass = 'root'; $db_name = 'baza'; $db_server = 'localhost'; mysql_connect($db_server,$db_user,$db_pass); mysql_select_db($db_name);
In potem se v drugih filih include ta file in sql query se nardi z enim stavkom, recimo takole :
$query = sprintf("INSERT INTO admin (uname,pass) VALUES ('%s', '%s')", mysql_real_escape_string($uname), mysql_real_escape_string($pass) ); mysql_query($query);
Bi billo bolje če zapiram povezavo?
DeeJay ::
Definitivno je bolš da jo zapreš, drugače jo mora mysql timeoutat. In če maš dost obiskano stran se ti lahko zgodi, da ti bo zmanjkalo povezav.
Zgodovina sprememb…
- spremenil: DeeJay ()
DeeJay ::
v my.cnf imaš nastavitev, koliko povezav dopuščaš (max_connections) in koliko časa potrebuje za timout povezave (wait_timeout)
če te nastavitve nimaš nastavljene je default wait_timeout 28800 sekund, kar pomeni, da povezava ostane odprta še 8 ur, če je prej ne zapreš. In če imaš nizek max_connections, lahko pomeni, da ti server ne bo več dopuščal novih povezav, dokler katera od odprtih povezav ne timeouta.
EDIT
Sm šu pogledat v php manual za mysql_connect in očitno ni več potrebno explicitno zapirat povezave:
To je PHP, lahko pa da kak drug programski jezik tega ne počne. Zato je pomojem dobra praksa, da počistiš zadeve za sabo.
če te nastavitve nimaš nastavljene je default wait_timeout 28800 sekund, kar pomeni, da povezava ostane odprta še 8 ur, če je prej ne zapreš. In če imaš nizek max_connections, lahko pomeni, da ti server ne bo več dopuščal novih povezav, dokler katera od odprtih povezav ne timeouta.
EDIT
Sm šu pogledat v php manual za mysql_connect in očitno ni več potrebno explicitno zapirat povezave:
Note:
The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().
To je PHP, lahko pa da kak drug programski jezik tega ne počne. Zato je pomojem dobra praksa, da počistiš zadeve za sabo.
Zgodovina sprememb…
- spremenil: DeeJay ()
snooze77 ::
DeeJay hvala za odgovor. Ne vem kk sem lahka naredil tako napako. Sem uporabil takšen način kot si ga ti pokazal, da avtomatsko zapre povezavo. Sem nov v php zato pride do kakšnih napak.
Še enkrat hvala, Lp
Še enkrat hvala, Lp
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | php pomoč (sql)Oddelek: Programiranje | 905 (733) | joebanana |
» | [php] Knjiga gostovOddelek: Izdelava spletišč | 3155 (2358) | darix |
» | PHP login skriptOddelek: Izdelava spletišč | 2810 (1396) | Lion29 |
» | php updateOddelek: Programiranje | 927 (741) | keworkian |
» | napaka pri instalaciji forumaOddelek: Izdelava spletišč | 1393 (1223) | no_use4 |