الجمعة، 2 سبتمبر، 2016

عشرة أخطاء مشهورة في قواعد البيانات MySql يقع فيها مطورو PHP


موضوعنا اليوم مرتبط بقواعد البيانات MySql .. وهذه التدوينة موجهة للمطورين .. وكذلك للمسؤولين في الجهات المعنية بتقنية المعلومات. وكما ذكرنا لكم تسعى هذه المدونة لأن تصبح مستشاراً للكبار .
من المهم جداً لك كمطور أو كمسؤول تقنية معلومات أن تناقش فريق عملك حول وضعية قواعد بيانات موقعك أو تطبيقك . وهذه عشرة أخطاء يقع فيها مطوروا PHP عند العمل على قواعد البيانات MySql


استخدام MYISAM بدلاً من InnDB


لدى MySql عدد من محركات قواعد البيانات engines لكن أشهرها عند المبرمجين  MYISAM و InnDB ويأتي اختيار محرك MYISAM  بشكل افتراضي عند إنشاء قاعدة بيانات جديدة .
لا يُنصح باستخدام محرك MYISAM إلا إذا كنت تستخدم قاعدة بيانات بسيطة جداً أو تجريبية . لأنها تفتقد إلى بعض الخصائص الضرورية لحماية بياناتك مثل foreign key constraints أو   transactions وكذلك تأمين قاعدة بياناتك عند إضافة أو تحديث سجل. هذا قد يسبب خلل في أداء قاعدة بياناتك مع زيادة حجمها وكثرة العمليات عليها. .
الحل يكون باستخدام محرك InnDB

أخطاء في استخدام دوال php المخصصة لقواعد البيانات


وفرت php العديد من الدوال الخاصة بقواعد البيانات مثل
mysql_connect،
mysql_query،
 mysql_fetch_assoc
وهذا اذا كنت تستخدم الإصدار القديم من php و MySql .. من الخطأ الاستمرار في استخدام دوال MySql القديمة وينبغي التحول فوراً لاستخدام الدوال المحسنة والمتوافقة مع الإصدارات الحديثة من MySql ألا وهي MySqli والتي تمتلك العديد من المزايا في الأمن وسهولة الاستخدام والوظائف الجديدة التي تختصر شفرتك البرمجية. اقرأ أيضاً في هذه المدونة ("التحول إلى دوال mySql المطورة .. MySqli ضرورة لا تتأخر")

عدم فحص مدخلات المستخدم


اذا قررت فتح المجال للزوار لإضافة بيانات وحفظها في قاعدة بياناتك ينبغي عليك أن لا تثق أبدأ في معطيات الأشخاص الذين لن تعرفهم بلا شك . ويجب عليك أن تتحقق من البيانات عن طريق دوال التحقق على الخادم أو ما يسمى Server side validation التي يستحيل على المستخدم لموقعك تجازوها . أما أدوات التحقق باستخدام دوال التحقق على جهاز المستخدم أو ما يسمى Client side validation والتي تستخدم عادة لغة الجافاسكربت فهذي يسهل على المستخدم تجاوزها . وهي وضعت لخدمة المستخدم من حيث ضبط نوع البيانات وعددها لكن ليس من أجل حماية موقعك إطلاقاً
وحتى تتصور خطورة ذلك أنظر إلى سطر البرمجة التالي
المتغير القادم من حقل النموذج المخصص لدخول الأعضاء بهذا الشكل
اسم المستخدم:
  $username = $_POST["name"];
كلمة المرور:
 $password = $_POST["password"];
يحمع المبرمج هذه المتغيرات لينشئ جملة استعلام بهذا الشكل
$sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";

كل ما على المخرب عمله هو ادخال هذه الكلمة:
 “admin'; --” 
في اسم المستخدم لتصبح عبار الاستعلام كالتالي:
SELECT userid FROM usertable WHERE username='admin';
سوف يدخل المخرب بهذه الطريقة بصفته أدمن .. السبب أنه مرر عبارة تختصر جملة الاستعلام بإضافة علامة السيمي كولن وانتهى الامر.

عدم استخدام ترميز  UTF-8

مهم جداً لحل مشاكل المواقع والتطبيقات التي تستخدم اللغات المتعددة -خصوصاً اللغة العربية- أن تستخدم ترميز UTF-8 كترميز افتراضي .

تفضيل دوال PHP على دوال MySql

يجهل كثير من المطورين أن MySql لديها دوال خاصة بها فيعمد إلى استخدام دوال php أو انشاء واختراع دوال جديدة . مثلاُ لو احتاج احتساب معدل درجات الطالب ربما يجمع درجات كل مادة . ثم باستخدام php يجري عملية حسابية فيها ضرب وقسمة ومعادلة ويستخرج النسبة . مع العلم أن هناك دالة في MySql خاصة بهذه العملية ولا يحتاج الامر الا الى كتابة سطر استعلام واحد وهي دالة:
 AVG()
مثالها :
mysql> SELECT student_name, AVG(test_score)
    ->        FROM student
    ->        GROUP BY student_name;

أنظر أيضاً موضوعنا في هذه المدونة تحت عنوان أشهر دوال MySql التي يغفل عنها المبرمجون

الاستعلامات الرديئة

معظم مشاكل برامج php بسبب الاستعلامات الرديئة في قواعد البيانات ، ولو أخطأت في جملة استعلام واحدة فقط يتسبب ذلك الخطأ في إفساد تطبيقك بالكامل وربما كل موقعك على الويب. وMySql تقدم في موقعها شرحاً وافياً لصيغ الاستعلامات الصحيحة ، كما يوجد العديد من الأدوات المساعدة في كتابة وبناء جمل الاستعلام الدقيقة مثل SQl Yog  وكذلك sqlMestro

استخدام صيغة البيانات لخطأ

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

استخدام علامة النجمة *  في كتابة جملة الاستعلام

لا تستخدم أبداً النجمة في البحث بطريقة SELECT * FROM ... استخدم أسماء الحقول للبحث واطلب فقط الحقول التي تريد عرضها . حتى لو كنت تحتاج البحث في كل الحقول في الجدول ، اكتب أسماء الكل ولا تستخدم النجمة

الإفراط في إضافة الفهارس لغير حاجة.

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

عدم حفظ نسخة من قواعد البيانات .

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

تحياتي


إذا أعجبك المقال شاركه مع أصدقائك
لا تنس الاشتراك في المدونة .. والاشتراك في القائمة البريدية ... اشتراكك دعم لنا ويحفزنا لكتابة المزيد

أخوكم حسن الزهراني

اشترك عبر البريد الالكتروني

مشاركة مميزة

اقرأ هنا قبل أي شئ

إذا أعجبتك مواضيع هذه المدونة ادعمنا بما يلي : الاشتراك في المدونة عن طريق زر الاشتراك بالأعلى الاشتراك في القائمة البريدية للمدونة...

المتابعون