سؤال

أنا إعادة هندسة PHP يحركها موقع ويب الذي يستخدم الحد الأدنى من قاعدة البيانات.النسخة الأصلية المستخدمة "الزائفة-إعداد كشوف" (وظائف PHP التي لم تقتبس و المعلمة البديلة) لمنع هجمات حقن و فصل قاعدة البيانات المنطق من صفحة المنطق.

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

  • البيانات كلها مسلي بسيطة.معظمها في شكل SELECT foo,bar FROM baz WHERE quux = ? ORDER BY bar LIMIT 1.الأكثر مجمع البيان في الكثير هو ببساطة ثلاثة يختار انضم جنبا إلى جنب مع UNION ALLs.
  • كل صفحة ضرب ينفذ في معظم بيان واحد وينفذ ذلك مرة واحدة فقط.
  • أنا في بيئة استضافة وبالتالي خشية من يغلق أجهزتهم قبل أن تفعل أي "اختبارات الإجهاد" شخصيا.

بالنظر إلى أن استخدام إعداد البيانات على الأقل ضعف عدد قواعد البيانات ذهابا وإيابا ، أنا أفضل حالا تجنب لهم ؟ هل يمكنني استخدام PDO::MYSQL_ATTR_DIRECT_QUERY لتجنب النفقات العامة من قاعدة بيانات متعددة الرحلات مع الإبقاء على الاستفادة من البارامترات و حقن الدفاع ؟ أو القيام الثنائية المكالمات التي يستخدمها إعداد بيان API أداء جيدا بما فيه الكفاية مقارنة مع المنفذة غير مستعدة الاستفسارات التي أود أن لا تقلق حول ذلك ؟

تحرير:

شكرا على كل نصيحة جيدة ، الناس.هذا هو واحد حيث كنت أتمنى أن مارك أكثر من إجابة واحدة باسم "قبلت" — الكثير من وجهات نظر مختلفة.في نهاية المطاف, على الرغم من أنني يجب أن تعطي ريك حقه... دون جوابه كنت قد بسعادة ذهب و فعلت شيء خاطئ تماما حتى بعد التالية الجميع المشورة.:-)

يحتذى إعداد البيانات هو!

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

المحلول

أعتقد أنك تريد شركة تنمية نفط عمان::ATTR_EMULATE_PREPARES.أن إيقاف مواطن قاعدة البيانات المعدة, ولكن لا يزال يسمح الاستعلام الارتباطات لمنع حقن sql والحفاظ على sql الخاصة بك مرتبة.من ما أفهم, شركة تنمية نفط عمان::MYSQL_ATTR_DIRECT_QUERY إيقاف الاستعلام الارتباطات تماما.

نصائح أخرى

اليوم سيادة هندسة البرمجيات: إذا أنها لن تفعل أي شيء بالنسبة لك ، لا يستخدمونه.

عندما لا استخدام إعداد البيانات ؟ عندما كنت فقط سوف تكون قيد التشغيل البيان مرة واحدة قبل db الصدد يذهب بعيدا.

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

أنا لم تكن مألوفة مع شركة تنمية نفط عمان ، ولكن أراهن أنه يوفر آلية تشغيل parametrized الاستفسارات مع القيم المعطاة في نفس الوظيفة الاتصال إذا كنت لا ترغب في إعداد ، ثم تشغيل خطوة منفصلة.(على سبيل المثال ، شيء من هذا القبيل run_query("SELECT * FROM users WHERE id = ?", 1) أو ما شابه ذلك.)

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

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

فرصة أن حل المخصص الخاص بك غير آمنة عالية جدا.استخدام البيانات المعدة.لديك للحفاظ على رمز أقل من هذا الطريق.

فوائد إعداد البيانات كما يلي:

  • كل استعلام يتم تجميعها مرة واحدة فقط
  • الخلية استخدام أكثر كفاءة النقل تنسيق إرسال البيانات إلى الخادم

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

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

بصراحة, أنا لا أعتقد أنك يجب أن تقلق بشأن ذلك.ولكن أتذكر أن عددا من البيانات PHP الوصول إلى أطر دعم إعداد بيان طرق غير إعداد بيان وسائط.إذا كنت أتذكر بشكل صحيح ، الكمثرى:DB هل مرة في اليوم.

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

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

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