Vra

Wat is die vinnigste manier om te kry'n groot bedrag van data (dink golf) en die mees doeltreffende (dink prestasie) te kry'n groot bedrag van data van'n MySQL databasis na'n sessie sonder om om voort te gaan om te doen wat ek reeds het:

$sql = "SELECT * FROM users WHERE username='" . mysql_escape_string($_POST['username']) . "' AND password='" . mysql_escape_string(md5($_POST['password'])) . "'";
$result = mysql_query($sql, $link) or die("There was an error while trying to get your information.\n<!--\n" . mysql_error($link) . "\n-->");
if(mysql_num_rows($result) < 1)
 {
    $_SESSION['username'] = $_POST['username'];
    redirect('index.php?p=signup');
 }
$_SESSION['id'] = mysql_result($result, '0', 'id');
$_SESSION['fName'] = mysql_result($result, '0', 'fName');
$_SESSION['lName'] = mysql_result($result, '0', 'lName');
...

En voor iemand vra ja, ek het regtig nodig het om te " KIES

Edit:Ja, ek is reinig die data, sodat daar kan geen SQL-inspuiting, wat is verder op in die kode.

Was dit nuttig?

Oplossing

Ek het met hierdie en dit lyk of dit werk.

while($row = mysql_fetch_assoc($result))
 {
    $_SESSION = array_merge_recursive($_SESSION, $row);
 }

Ander wenke

Die meeste doeltreffende:

$get = mysql_query("SELECT * FROM table_name WHERE field_name=$something") or die(mysql_error());

$_SESSION['data'] = mysql_fetch_assoc($get);

gebraai.

Dit is nou gestoor in 'n skikking. So sê 'n veld is gebruikersnaam jy net doen:

echo $_SESSION['data']['username'];

Data is die naam van die skikking -. Gebruikersnaam is die veld verskeidenheid .. wat die waarde vir die veld hou

EDIT: vaste 'n paar sintaksis foute: P maar jy kry die idee

.

OK, beteken dit nie beantwoord jou vraag, maar nie jou huidige kode laat jou oop vir SQL-inspuiting?

Ek kan verkeerd, nooit gewerk het in PHP wees, het net die gebruik van snare in die SQL en alarm klokkies begin lui!

Edit:

Ek is nie probeer om te peuter met jou post, Ek is die regstelling van 'n spelfout, moet asseblief nie terug te rol.

Ek is nie seker wat jy bedoel met "groot hoeveelhede data", maar dit lyk vir my asof jy net die initialiseren data vir een gebruiker? As dit so is, kan ek nie sien watter rede om hierdie te optimaliseer, tensy jy honderde kolomme in jou databasis met 'n paar megagrepe data het in hulle.

Of, om dit anders te stel, hoekom doen wat jy nodig het om hierdie te optimaliseer? Het jy 'n prestasie probleme?

Wat jy nou doen is die reguit-vorentoe benadering, en ek kan nie regtig sien enige rede om dit anders te doen nie, tensy jy 'n paar spesifieke probleme het met dit.

wikkel die gebruiker data in 'n gebruiker voorwerp kan help sommige van die program struktuur though. Bekragtiging van jou insette is waarskynlik ook 'n goeie idee.

@Unkwntech Dit lyk of jy korrek is, maar ná 'n Google, wat gelei het hier lyk soos jy dalk wil verander na mysql_real_escape_string ()

As vir die wysig, ek reggemaak die spelling van doeltreffende , asook verwyder die "Wat is die" .. want dit is nie regtig nodig is sedert die onderwerp sê dit alles.

Jy kan die wysigingsgeskiedenis te hersien (wat mooi beklemtoon die werklike veranderinge) deur te kliek op die "geredigeer n min gelede" teks aan die onderkant van jou vraag.

Probeer into byvoorbeeld:

$_SESSION['data'] = json_encode(mysql_fetch_array($result));

Is die implementering van daardie funksie vinniger as wat hy reeds doen?

Is daar iemand anders probleme aangaan] in markdown het? Ek het om te plak

Ja, dit is ingeluister.

@Anders -. Daar is iets soos 50-75 kolomme

Weereens, tensy dit is eintlik prestasie probleme veroorsaak in jou aansoek Ek sou nie die moeite met die optimalisering van dit. As jy egter prestasie is 'n probleem sou ek oorweeg net om 'n paar van die data aanvanklik en lui-laai van die ander kolomme as dit nodig is.

As Unkwntech se voorstel wel werk, ek stel voor jy verander jou SELECT stelling sodat dit nie gryp alles, sedert jou wagwoord kolom sou wees een van die velde.

Soos vir of jy nie nodig het om te hou hierdie dinge in die sessie, ek sê hoekom nie?As jy gaan om seker te maak die DB wanneer die gebruiker inteken in (ek neem aan dit gedoen word, dan nie?) in elk geval, jy kan net so goed winkel redelik nie-sensitiewe inligting (soos die naam) in die sessie as jy van plan op die gebruik van daardie inligting deur die persoon se besoek.

Dit is nie soseer dat dit veroorsaak prestasie probleme, maar wat ek wil die kode om 'n bietjie skoner kyk.

Dan draai die gebruiker data in 'n klas. Modifyng $ _SESSION lyk direk ietwat vuil. As jy wil hê dat die data in 'n woordeboek-wat jy nog kan doen, selfs as jy sit dit in 'n aparte klas hou.

Jy kan ook implementeer 'n lus wat herhaal oor alle kolomme, kry hulle name en die data te kopieer na 'n kaart met dieselfde sleutel name. Op dié manier jou interne veranderlikes-naam wat deur die sleutel in die woordeboek-en databasis kolom name sal altyd dieselfde wees. (Dit het ook die nadeel van die verandering van die veranderlike naam wanneer jy die naam kolom verander in die databasis, maar dit is 'n redelik algemeen en goed aanvaar trade-off.)

Probeer into byvoorbeeld:

$_SESSION['data'] = json_encode(mysql_fetch_array($result));

Edit Later dan json_decode jy die $_SESSION['data'] veranderlike en jy het 'n skikking met al die inligting wat jy nodig het.

Verduideliking:

Jy kan json_encode en json_decode gebruik as jy wil hê dat die aantal lyne van kode wat jy skryf te verminder. In die voorbeeld in die vraag, 'n reël van die kode is wat nodig is om elke kolom in die databasis te kopieer na die sessie skikking. In plaas daarvan om dit te doen met 50-75 lyne van kode, kan jy dit doen met 1 deur json_encoding die hele databasis rekord in 'n string. Hierdie string kan gestoor word in die sessie veranderlike. Later, wanneer die gebruiker 'n ander bladsy besoek, die sessie veranderlike is daar met die hele into string. As jy dan wil hê dat die eerste naam ken, kan jy die volgende kode gebruik:

$fname = json_decode($_SESSION['data'])['fname'];

Hierdie metode sal nie vinniger as 'n reël vir reël kopie wees, maar dit sal red kodering en dit sal meer weerstand teen veranderinge in die databasis of kode wees.

BTW Is daar iemand anders probleme aangaan] in markdown het? Ek het om te plak.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top