Frage

Was ist der Schnellste Weg, um eine große Menge von Daten (man denke golf) und den effizientesten (glaube Leistung), um eine große Menge von Daten aus einer MySQL-Datenbank zu einer Sitzung, ohne dass das auch weiterhin tun, was ich schon habe:

$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');
...

Und bevor jemand fragt, ja, das Tue ich wirklich brauchen, um zu 'WÄHLEN Sie

Edit:Ja, ich bin bereinigen der Daten, so dass es keine SQL-injection,, dass ist weiter oben im code.

War es hilfreich?

Lösung

Ich kam mit diesem und es scheint zu funktionieren.

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

Andere Tipps

Die meisten effizient:

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

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

Fertig.

Dies ist jetzt gespeichert in einem array.So sagen Sie ein Feld "Benutzername" ist Sie gerade tun:

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

Daten ist der name des array - Benutzername ist der array-Feld..enthält den Wert für das Feld.

EDIT:fixed some syntax Fehler :P aber Sie bekommen die Idee.

OK, das beantwortet nicht deine Frage, aber nicht Ihren aktuellen code für SQL-Injection?

Ich könnte falsch sein, nie arbeitete in PHP, sah nur die Verwendung von Zeichenfolgen in SQL und die Alarmglocken läuteten!

Edit:

Ich bin nicht versucht zu manipulieren mit Ihre post-war ich der Korrektur von Rechtschreib-Fehler, bitte tun nicht zurück Rollen.

Ich bin mir nicht sicher, was Sie meinen "großen Datenmengen", aber es sieht zu mir wie Sie erst initialisieren der Daten für einen Benutzer?Wenn dem so ist, sehe ich keinen Grund, um dies zu optimieren, es sei denn, Sie haben Hunderte von Spalten in Ihrer Datenbank mit mehreren Megabyte Daten in Ihnen.

Oder, um es anders auszudrücken, warum Sie benötigen, um dies zu optimieren?Sind Sie mit performance-Problemen?

Was Sie jetzt machen, ist die straight-forward-Ansatz, und ich kann nicht wirklich einen Grund, es anders machen, es sei denn, Sie haben Probleme mit es.

Die Verpackung der Benutzer Daten in ein user-Objekt könnte helfen, einige auf der Programm-Struktur, obwohl.Überprüfen Sie Ihre Eingabe ist wahrscheinlich auch eine gute Idee.

@Unkwntech Sieht aus wie Sie richtig sind, aber nach einer Google -, die led - hier sieht aus wie Sie möglicherweise ändern möchten zu mysql_real_escape_string()

Wie zum Bearbeiten, ich korrigierte die Rechtschreibung effiziente entfernt die "was ist"..Da, das ist nicht wirklich erforderlich, da die topic sagt alles.

Sie können überprüfen Sie die edit-history (die schön-highlights, die tatsächlichen änderungen, indem Sie auf die "bearbeitet min ago" text unten auf Ihre Frage.

Versuchen Sie es mit json-Beispiel:

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

Ist die Umsetzung, die Funktion schneller als das, was er bereits tut?

Hat sonst noch jemand Probleme die Eingabe ] in markdown?Ich habe zum einfügen in

Ja, es ist verbuggt.

@Anders - es gibt so etwas wie 50-75 Spalten.

Wieder, es sei denn, dies tatsächlich zu performance-Problemen in Ihrer Anwendung würde ich nicht die Mühe mit der Optimierung von it.Wenn die Leistung ist jedoch ein problem, ich würde nur einige der Daten, die anfangs-und lazy-loading-die anderen Spalten, wie Sie benötigt werden.

Wenn Unkwntech Vorschlag funktioniert in der Tat, ich schlage vor, Sie ändern Ihre SELECT - Anweisung so, dass es nicht alles packen, da Ihr Passwort Spalte wäre einer dieser Bereiche.

Als ob oder nicht Sie brauchen, um dieses Zeug in der Sitzung, ich sage, warum nicht?Wenn Sie sind gehen zu prüfen der DB, wenn der Benutzer sich anmeldet (ich nehme an, dies würde getan werden, dann, Nein?) wie auch immer, Sie könnte genauso gut lagern ziemlich nicht-sensible Daten (wie name) in der Sitzung, wenn Sie planen, verwenden, dass Informationen während der gesamten person besuchen.

Es ist nicht so viel, dass es zu performance-Problemen, aber ich möchte, dass der code ein bisschen sauberer.

Dann wickeln Sie die Daten der Benutzer in einer Klasse.Modifyng $_SESSION direkt sieht etwas schmutzig.Wenn Sie die Daten behalten möchten, in einem Wörterbuch—das können Sie noch tun, auch wenn Sie es in eine separate Klasse.

Sie könnten auch implementieren Sie eine Schleife iteriert über alle Spalten, ruft Ihren Namen, und kopieren Sie die Daten zu einer Karte mit dem gleichen Namen.Damit ist Ihre interne Variablen—Namen durch Schlüssel in der Wörterbuch—und Datenbank-Spalte-Namen würde immer das gleiche.(Dies hat auch den Nachteil, ändern den Namen der Variablen, wenn Sie ändern Sie den Namen der Spalte in der Datenbank, aber dies ist weit verbreitet und gut akzeptiert trade-off.)

Versuchen Sie es mit json-Beispiel:

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

Bearbeiten Später werden Sie dann json_decode die $_SESSION['data'] variabel und du hast ein array mit allen Daten, die Sie brauchen.

Klarstellung:

Sie können verwenden json_encode und json_decode wenn Sie wollen zu reduzieren die Anzahl von Zeilen code, die Sie schreiben.In dem Beispiel In der Frage, eine Zeile code nötig war, um zu kopieren jede Spalte in der Datenbank, um die SESSION-array.Anstatt mit 50-75 Zeilen code, Sie könnte tun es mit 1 von json_encoding der gesamte Datenbank-Datensatz in eine Zeichenkette um.Diese Zeichenfolge kann gespeichert werden in die SESSION-variable.Später, wenn der Benutzer besucht eine andere Seite, die SESSION-variable ist es mit der ganzen JSON-string.Wenn Sie wollen dann wissen, der erste name, Sie können den folgenden code verwenden:

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

Diese Methode wird nicht schneller sein als eine Zeile kopieren, aber es wird sparen Kodierung und es wird mehr resistent gegen änderungen in Ihrer Datenbank oder code.

BTW Hat sonst noch jemand Probleme die Eingabe ] in markdown?Ich habe zum einfügen in.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top