الطريقة الأكثر فعالية للحصول على البيانات من قاعدة البيانات إلى الدورة

StackOverflow https://stackoverflow.com/questions/25767

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أسرع طريقة للحصول على كمية كبيرة من البيانات (اعتقد جولف) و الأكثر كفاءة (أعتقد أن الأداء) للحصول على كمية كبيرة من البيانات من قاعدة بيانات MySQL إلى الدورة دون الحاجة إلى مواصلة القيام بما لدي:

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

و قبل أن يسأل أي شخص نعم أنا حقا بحاجة إلى تحديد

تحرير:نعم أنا التعقيم البيانات ، بحيث يمكن أن يكون هناك أي حقن SQL, هذا هو في التعليمات البرمجية.

هل كانت مفيدة؟

المحلول

لقد جاء مع هذا ويبدو أن العمل.

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

نصائح أخرى

الأكثر فعالية:

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

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

القيام به.

هذا هو الآن المخزنة في صفيف.لذلك أقول حقل اسم المستخدم يمكنك فقط القيام به:

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

البيانات هو اسم المصفوفة - اسم المستخدم هو مجموعة المجال..الذي يحمل قيمة لهذا الحقل.

تحرير:إصلاح بعض جملة الأخطاء :P ولكن تحصل على هذه الفكرة.

حسنا, هذا لا يجيب على سؤالك ولكن لا القانون الحالي الخاص بك ترك فتح إلى حقن SQL?

أنا يمكن أن تكون خاطئة ، لم يعمل في PHP, فقط رأيت استخدام السلاسل في SQL و بدأت أجراس الإنذار يرن!

تحرير:

أنا لا تحاول العبث مع وظيفة الخاص بك, لقد تم تصحيح خطأ إملائي ، من فضلك لا لفة مرة أخرى.

أنا لست متأكدا ماذا تقصد ب "كميات كبيرة من البيانات", ولكن يبدو لي أنك فقط تهيئة البيانات لمستخدم واحد?إذا كان الأمر كذلك, أنا لا أرى أي سبب لتحسين هذا إلا إذا كان لديك مئات من الأعمدة في قاعدة البيانات الخاصة بك مع عدة ميغا بايت من البيانات في نفوسهم.

أو بعبارة أخرى لماذا تحتاج إلى تحسين ؟ هل تواجه مشاكل في الأداء?

ما تقومون به الآن هو على التوالي إلى الأمام النهج, و لا أستطيع أن أرى أي سبب للقيام بذلك بشكل مختلف إلا إذا كان لديك بعض المشاكل مع ذلك.

التغليف المستخدم البيانات في كائن المستخدم قد يساعد على هيكل البرنامج على الرغم من.التحقق من صحة المدخلات الخاصة بك هو ربما أيضا فكرة جيدة.

@Unkwntech يبدو أنك صحيحة ، لكن بعد جوجل ، مما أدى هنا يبدو أنك قد ترغب في تغيير mysql_real_escape_string()

أما بالنسبة تحرير تصحيح الإملاء كفاءة فضلا عن إزالة "ما هو"..لأن هذا ليس مطلوبا لأن الموضوع يقول كل شيء.

يمكنك مراجعة تاريخ تحرير (الذي لطيف يسلط الضوء على التغيرات الفعلية) من خلال النقر على "تحريرها دقيقة مضت" النص في الجزء السفلي من سؤالك.

حاول استخدام جسون على سبيل المثال:

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

يتم تنفيذ هذه المهمة بشكل أسرع مما هو بالفعل تفعل ؟

لا أحد آخر لديه مشكلة في إدخال ] في تخفيض السعر?يجب أن لصقه في

نعم انها تنصتت.

@أندرس - هناك شيء مثل 50-75 الأعمدة.

مرة أخرى, إلا إذا كان هذا هو في الواقع تسبب مشاكل الأداء في التطبيق الخاص بك وأود أن لا يكلف نفسه عناء مع تحسين ذلك.ومع ذلك ، إذا كان الأداء هو مشكلة وأود أن تنظر فقط الحصول على بعض البيانات في البداية و كسول التحميل الأعمدة الأخرى كما هو مطلوب.

إذا Unkwntech اقتراح يعمل بالفعل, أنا أقترح عليك تغيير SELECT بيان ذلك أنه لا الاستيلاء على كل شيء ، لأن كلمة المرور الخاصة بك العمود ستكون واحدة من تلك الحقول.

أما عن ما إذا كان أو لا تحتاج إلى أن نضع هذه الأشياء في الدورة ، أنا أقول لم لا ؟ إذا كنت تريد الذهاب إلى التحقق من قاعدة البيانات عندما يقوم المستخدم بتسجيل الدخول (أفترض أن هذا يمكن القيام به بعد ذلك؟) على أي حال, ربما كنت كذلك المتجر إلى حد ما غير معلومات حساسة (مثل الاسم) في الدورة إذا كنت تخطط لاستخدام هذه المعلومات في جميع أنحاء الشخص الزيارة.

ليس كثيرا أن يسبب مشاكل الأداء ولكن أود رمز ننظر قليلا أكثر نظافة.

ثم لف بيانات المستخدم في فئة.Modifyng $_SESSION مباشرة يبدو إلى حد ما القذرة.إذا كنت تريد أن تبقي البيانات في القاموس—التي يمكنك لا تزال تفعل حتى لو كنت وضعت في فئة منفصلة.

يمكنك أيضا تنفيذ حلقة التي تتكرر على جميع الأعمدة يحصل أسمائهم و نسخ البيانات على الخريطة مع نفس مفتاح الأسماء.أن المتغيرات الداخلية—يدعى المفتاح في القاموس و عمود قاعدة بيانات الأسماء سوف يكون دائما هو نفسه.(هذا أيضا الجانب السلبي من تغيير اسم المتغير عند تغيير اسم العمود في قاعدة البيانات ، ولكن هذا هو الشائع و المتعارف عليها المفاضلة.)

حاول استخدام جسون على سبيل المثال:

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

تحرير ثم في وقت لاحق json_decode على $_SESSION['data'] متغير لديك مجموعة مع جميع البيانات التي تحتاجها.

التوضيح:

يمكنك استخدام json_encode و json_decode إذا كنت ترغب في خفض عدد من الأسطر من التعليمات البرمجية يمكنك كتابة.في المثال في السؤال سطر من التعليمات البرمجية كنت بحاجة إلى نسخ كل عمود في قاعدة بيانات الدورة مجموعة.بدلا من القيام بذلك مع 50-75 أسطر من التعليمات البرمجية ، يمكنك أن تفعل ذلك مع 1 json_encoding قاعدة البيانات بأكملها سجل في سلسلة.هذه السلسلة يمكن تخزينها في متغير جلسة.في وقت لاحق, عندما يقوم المستخدم بزيارة صفحة أخرى ، الدورة متغير هناك مع كامل سلسلة JSON.ثم إذا كنت تريد أن تعرف الاسم الأول ، يمكنك استخدام التعليمات البرمجية التالية:

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

هذه الطريقة لن تكون أسرع من خط من خط نسخ ، لكنه سيوفر الترميز وسوف تكون أكثر مقاومة للتغيرات في قاعدة البيانات الخاصة بك أو رمز.

راجع للشغل لا أحد آخر لديه مشكلة في إدخال ] في تخفيض السعر?يجب أن لصقه في.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top