سؤال

هل يجب علي استخدام php PDO أو mysql_connect العادي لتنفيذ استعلامات قاعدة البيانات في PHP؟

أيهما أسرع؟

إحدى الفوائد الكبيرة لشركة PDO هي أن الواجهة متسقة عبر قواعد بيانات متعددة.هناك بعض الوظائف الرائعة للبيانات المعدة أيضًا، والتي تخفف بعض المتاعب من الهروب من جميع سلاسل الاستعلام الخاصة بك.قابلية نقل PDO أكبر من mysql_connect.

لذا، هل يجب أن أستخدم PDO لهذه الأسباب أم ألتزم بـ mysql_connect التقليدي؟

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

المحلول

وشركة تنمية نفط عمان أبطأ قليلا من mysql_ * ولكن لديها قابلية كبيرة. تقدم شركة تنمية نفط عمان واجهة واحدة عبر قواعد بيانات متعددة. هذا يعني أنه يمكنك استخدام DB متعددة دون استخدام mysql_query عن الخلية، mssql_query لMS SQL الخ مجرد استخدام شيء من هذا القبيل $ DB-> الاستعلام ( "INSERT INTO ...") دائما. بغض النظر عن سائق DB الذي تستخدمه.

وهكذا، على مشروع أكبر أو المحمولة PDO هو الأفضل. حتى زند استخدام إطار شركة تنمية نفط عمان.

نصائح أخرى

تشير بعض التوقيتات السريعة إلى أن PDO أسرع قليلاً في الاتصال.

$start = microtime(true);
for($i=0; $i<10000; ++$i) {

    try {
        $db = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage()."\n";
    }
    $db = null;
}

$pdotime = microtime(true) - $start;
echo "PDO time: ".$pdotime."\n";

$start = microtime(true);
for($i=0; $i<10000; ++$i) {
    $db = mysql_connect($host, $user, $password);
    if(!$db) {
        echo "Connection failed\n";
    }
    if(!mysql_select_db($schema, $db)) {
        echo "Error: ".mysql_error()."\n";
    }
    mysql_close($db);
}

$rawtime = microtime(true) - $start;
echo "Raw time: ".$rawtime."\n";

يعطي نتائج مثل

PDO time: 0.77983117103577
Raw time: 0.8918719291687

PDO time: 0.7866849899292
Raw time: 0.8954758644104

PDO time: 0.77420806884766
Raw time: 0.90708494186401

PDO time: 0.77484893798828
Raw time: 0.90069103240967

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

لقد ذكرت جميع الأسباب التي تجعلك تستخدم PDO بنفسك.حقًا، لا تستخدم أبدًا وظائف mysql_* مباشرة، إما استخدم PDO، أو استخدم بعض آخر مكتبة.

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

هناك شيئان/ثلاثة أشياء رائعة مع شركة تنمية نفط عمان، مقارنة بـ mysql_* :

  • واجهة أكثر أو أقل ثباتًا عبر قواعد البيانات؛أفضل من استخدام mysql_*, pg_*, oci_*, ...
  • واجهة برمجة التطبيقات الموجهة للكائنات (mysqli_* لديه OO-API، ولكن لا mysql_*)
  • دعم الميزات الجديدة لـ MySQL >= 4.1 (مثل mysqli_*, ، لكن لا mysql_*, ، مرة أخرى)

بالمناسبة :أنا أستخدم PDO بشكل عام - إما "يدويًا" أو لأنه مدمج/مستخدم بواسطة إطار زند و/أو عقيدة.


كملاحظة جانبية :حتى لو كنت لا تنوي استخدام PDO، لاحظ أنه يوصى باستخدام mysqli بدلاً من mysql.

يرى هذه الصفحة من دليل PHP, ، عن ذلك.

  • باستخدام PDO، يمكنك استخدام المعلمات المرتبطة والتي ستمنع معظم هجمات حقن SQL.
  • يمكنك الحصول على المزيد من السرعة باستخدام البيانات المعدة من قبل شركة تنمية نفط عمان.
  • واجهة قياسية لجميع الواجهات الخلفية لقاعدة البيانات
  • هناك مجموعة من الطرق المفيدة (مثل عائلة الجلب*)

وفعلت بعض اختبار الأداء لمقارنة وظائف Mysqli إلى وظائف شركة تنمية نفط عمان باستخدام كل البيانات المعدة والاستفسارات المباشرة العادية (اختبار باستخدام عبارات مختارة على Mysqlnd والجداول MYISAM).

ولقد وجدت أن الاستفسارات شركة تنمية نفط عمان هي مجرد أبطأ قليلا من Mysqli، ولكن بشكل طفيف. هذا الأمر يبدو معقولا تماما منذ تستخدم شركة تنمية نفط عمان لهذا الغرض في الغالب مجرد مجمع الذي يدعو ظائف Mysqli. ميزة استخدام PDO هو أنه يجعل من الأسهل قليلا للهجرة إلى قاعدة بيانات مختلفة لأن الأسماء وظيفة ليست محددة إلى الخلية.

والفرق الأداء الحقيقي هو في ما إذا كنت تستخدم الاستفسارات المعدة. هناك أداء كبير وهام <م> عقوبة إلى استخدام الاستعلامات المعدة. الأشخاص الآخرين الذين قد اختبرت لهم وقد وجدت نفس النتائج.

والمرة الوحيدة التي أعدت الاستعلامات أسرع هو إذا كنت تستعد استعلام مرة واحدة ثم تقديمه آلاف المرات مع قيم البيانات المختلفة. خلاف ذلك، وانها دائما أسرع لاستخدام mysqli :: الاستعلام () أو شركة تنمية نفط عمان :: الاستعلام (). ولكن من المهم أن ندرك أن هذه الوظائف لا الهروب قيم البيانات بالنسبة لك، لذلك عليك أن تتذكر لاستخدام mysqli :: real_ escape_ سلسلة () أو شركة تنمية نفط عمان :: اقتباس () على متغيرات البيانات.

وأوصي عموما باستخدام PDO ما لم يكن هناك سبب محدد لا يمكنك. إذا لم يكن هناك فارق كبير بين الاثنين وليس لديك سبب لعدم استخدام شركة تنمية نفط عمان، وأعتقد أنه سيكون من الأفضل للوصول الى ممارسة استخدام DB التجريد في التطبيقات الخاصة بك من الذهاب مع mysql_ * لأنه ببساطة هناك. وأود أن أقول دعونا يفوز الفريق الأفضل الممارسة.

في كلتا الحالتين، يمكنك استدعاء نفس الخادم الخلية من خادم بى نفسه ... لذلك لا يمكن لاحظت وجود الكثير من الفرق.

إذا كنت تريد الأداء الجيد، والتفكير في ذاكرة التخزين المؤقت (memcache أو بسيطة ملف بى ...) وجعل الهيكل الأساسي بيانات جيدة (INDEX ...)

  • PDO أفضل من SQL
  • توفر شركة تنمية نفط عمان وبيان الإعداد الخاص بها أفضل كود آمن ضد حقن SQL
  • PDO هو كائن موجه ;)
  • PDO متوافق مع بعض محركات قواعد البيانات كما هو موضح من قبل
  • تم إهمال MySQLl_* وستتم إزالته قريبًا
  • توفر شركة تنمية نفط عمان المزيد من الوظائف مع سطر أقل من الرموز مثال:

    شركة تنمية نفط عمان

    1. يتصل
    2. تحقق من "<" و">" و"#" (هذا التحقق من الاستخدامات العالمية)
    3. يحضر
    4. ينفذ
    5. يغلق

ماي إس كيو إل_*

  1. يتصل
  2. إضافة شرطة مائلة للخلف
  3. Xsafe
  4. تحقق من "<" و">" و"#" (هذا التحقق من الاستخدامات العالمية)
  5. استفسار
  6. يغلق

كل من نفس الوظيفة ولكنك تقارن للرموز PDO أكثر قابلية للقراءة إنسانيا :) إذن ما رأيك؟

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

وتم إهمال وظيفة mysql_connect اعتبارا من PHP 5.5.0 و، كما هو الحال مع الميزات الأكثر إهمال، سيتم إزالتها. لذلك، يفضل استخدام PDO_MySQL (أو بديل آخر <أ href = على "HTTP : //php.net/manual/en/book.mysqli.php "يختلط =" نوفولو "> MySQLi ) على mysql_connect

المصدر: http://php.net/manual/en/function. ك-connect.php

بعض مزايا شركة تنمية نفط عمان:

  1. يمكن الوصول إلى قاعدة بيانات متعددة.
  2. توفير العديد من برامج تشغيل قاعدة البيانات للاتصال بقاعدة بيانات مختلفة مختلفة.
  3. عند التبديل من قاعدة بيانات إلى قاعدة بيانات أخرى، لا تحتاج إلى كتابة كل التعليمات البرمجية للاتصال بقاعدة البيانات الجديدة، فقط قم بتغيير سلسلة الاتصال وبعض الاستعلامات المطلوبة لقاعدة البيانات الجديدة.
  4. إنه يوفر بيان إعداد وهو نوع من قالب الاستعلام الذي يتم تجميعه مرة واحدة فقط ويمكن تنفيذه عدة مرات كما تريد، فقط عن طريق تغيير السمات التي تسمى حامل المكان.
  5. عملية عامة سهلة وفعالة مثل الإدراج والتحديث...إلخ.

رمز اتصال قاعدة بيانات PDO:

<?php
$dbhost = 'localhost';
$dbname = 'clsrepair';
$dbuser = 'root';
$dbpass = '';

try {
    $db = new PDO("mysql:host={$dbhost};dbname={$dbname}",$dbuser,$dbpass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch(PDOException $e) {
    echo "Connection error: ".$e->getMessage();
}
?>

رمز اتصال قاعدة بيانات MySQL العادي:

<?php 
mysql_connect("localhost","root", "");
mysql_select_db ("clsrepair");
?>

أو

 <?php
$dbHost = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'clsrepair';
$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server.");
mysql_select_db ($dbDatabase, $db) or die ("Could not select database.");
?>

رمز اتصال قاعدة بيانات MySQL سهل ولكن شركة PDO لديها العديد من المزايا.

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