MySqli هي النسخة المطورة من دالة قواعد البيانات في بي اتش بي php ورغم توقف الدوال القديمة منذ عدة سنين الا أن بعض المبرمجين العرب مازال يستخدمها وفي ذلك خطورة أمنية كبيرة على التطبيقات
سواء كنت مطور ويب بلغة PHP & MySql ولك عدة تطبيقات أو مواقع ، أو مسؤول في شركة أو وزارة ولديك فريق مبرمجين ومطورين يجب عليك أن تأخذ هذا الموضوع بجدية
بي اتش بي أعلنت التحول إلى دوال بي اتش بي المطورة الخاصة بقواعد البيانات MySql وأضافت حرف الآي إلى الدوال الجديدة للتمييز لتصبح اسمها MySqli
وإليك موجز عن أهم النقاط التي ذكرت في بيان الفرق بين الدوال في الحالتين وأسباب إيقاف دعم الدوال القديمة من موقع php.net
- توقف تطوير MySql من قبل المنظمة php.net
- أهملت رسميا مع اعتماد النسخة PHP 5.5 (نزلت في يونيو 2013).
- أزيلت تماما من نسخة PHP 7.0 (نزلت في ديسمبر 2015)
- والأسباب كثيرة من أهمها
- تفتقر إلى واجهة البرمجة الكانية الموجهة OOP
- لا يدعم:
-
- خاصية حجب الاستعلامات غير المتزامنة asynchronous queries
- خاصية الاستعلامات المعدة مسبقاً Prepared statements
- الإجراءات المخزنة Stored procedures
- جمل لاستعلام المتعددة Multiple Statements
- Transactions
بالإضافة إلى النواحي الأمنية التي تغني عن استخدام العديد من دوال الحماية في الإصدارات السابقة والتي كثيراً ما يغفل عن استخدامها المبرمجون المبتدئون.
وجميع الخصائص التي ذكرت هنا أن MySql لا تدعمها متوفرة في MySqli وغيرها الكثير
مع العلم أن PHP وفرت في الجيل الجديد طريقتين للاتصال بقواعد البيانات هي :
1- MySqli
2-PDO_MYSQL
ويبقى السبب الأهم والدافع لك لإيقاف جميع مشاغلك والبدء بالعمل على التغيير هو الأمان ثم الأمان ثم الأمان.
وكذلك إذا كنت مسؤول عن فريق مطورين يحب أن توقف جميع مهامهم والطلب من عملائك الانتظار إلى حين اكتمال نقل تطبيقاتك إلى MySqli المطورة
التحول الى MySqli يتطلب جهد كبير
والعمل في هذه المهمة يحتاج جهد كبير فأنت أو فريقك مطلوب منهم تعديل جميع صفحات موقعك أو تطبيقك التي تحتوى على دوال الاتصال بقواعد البيانات وإجراء التغييرات عليها حسب ما يلي :
mysql_affected_rows -> mysqli_affected_rows($link)
mysql_close -> mysqli_close($link)
mysql_data_seek -> mysqli_data_seek( $result, $offset)
mysql_errno -> mysqli_errno( $link)
mysql_error -> mysqli_error( $link)
mysql_fetch_array -> mysqli_fetch_array( $result, $type)
mysql_fetch_assoc -> mysqli_fetch_assoc( $result)
mysql_fetch_lengths -> mysqli_fetch_lengths( $result )
mysql_fetch_object -> mysqli_fetch_object( $result, $class, $params)
mysql_fetch_row -> mysqli_fetch_row( $result)
mysql_field_seek -> mysqli_field_seek( $result, $number)
mysql_free_result -> mysqli_free_result(result)
mysql_get_client_info -> mysqli_get_client_info( $link)
mysql_get_host_info -> mysqli_get_host_info( $link)
mysql_get_proto_info -> mysqli_get_proto_info( $link)
mysql_get_server_info -> mysqli_get_server_info( $link)
mysql_info -> mysqli_info( $link)
mysql_insert_id -> mysqli_insert_id( $link)
mysql_num_rows -> mysqli_num_rows( $result)
mysql_ping -> mysqli_ping( $link)
mysql_query -> mysqli_query( $link, $query)
mysql_real_escape_string -> mysqli_real_escape_string( $link)
mysql_select_db – > mysqli_select_db( $link, $database)
mysql_set_charset -> mysqli_set_charset( $link, $charset)
mysql_stat -> mysqli_stat( $link)
mysql_thread_id -> mysqli_thread_id( $link)
mysql_close -> mysqli_close($link)
mysql_data_seek -> mysqli_data_seek( $result, $offset)
mysql_errno -> mysqli_errno( $link)
mysql_error -> mysqli_error( $link)
mysql_fetch_array -> mysqli_fetch_array( $result, $type)
mysql_fetch_assoc -> mysqli_fetch_assoc( $result)
mysql_fetch_lengths -> mysqli_fetch_lengths( $result )
mysql_fetch_object -> mysqli_fetch_object( $result, $class, $params)
mysql_fetch_row -> mysqli_fetch_row( $result)
mysql_field_seek -> mysqli_field_seek( $result, $number)
mysql_free_result -> mysqli_free_result(result)
mysql_get_client_info -> mysqli_get_client_info( $link)
mysql_get_host_info -> mysqli_get_host_info( $link)
mysql_get_proto_info -> mysqli_get_proto_info( $link)
mysql_get_server_info -> mysqli_get_server_info( $link)
mysql_info -> mysqli_info( $link)
mysql_insert_id -> mysqli_insert_id( $link)
mysql_num_rows -> mysqli_num_rows( $result)
mysql_ping -> mysqli_ping( $link)
mysql_query -> mysqli_query( $link, $query)
mysql_real_escape_string -> mysqli_real_escape_string( $link)
mysql_select_db – > mysqli_select_db( $link, $database)
mysql_set_charset -> mysqli_set_charset( $link, $charset)
mysql_stat -> mysqli_stat( $link)
mysql_thread_id -> mysqli_thread_id( $link)
الاسطر التالية فيها أبرز التغيرات في الدوال وكيفية تعديلها ، لأهم الدوال المستخدمة في مواقع الويب.
الصيغة المتغيرة بين دوال MySqli المطورة ودوال MySql القديمة :
mysqli Function الدوال المطورة | mysql Function الدوال القديمة |
---|---|
mysqli_connect($db_server, $db_username, $db_password, $db_name) | mysql_connect($db_server, $db_username, $db_password) followed by mysql_select_db($db_name) |
mysqli_errno($db) | mysql_errno() or mysql_errno($db) |
mysqli_error($db) | mysql_error() or mysql_error($db) |
mysqli_fetch_array($result) | mysql_fetch_array($result) |
mysqli_fetch_assoc($result) | mysql_fetch_assoc($result) |
mysqli_fetch_row($result) | mysql_fetch_row($result) |
mysqli_insert_id($db) | mysql_insert_id($db) |
mysqli_num_rows($result) | mysql_num_rows($result) |
mysqli_query($db,$query) | mysql_query($query) or mysql_query($query,$db) |
mysqli_select_db($db,$dbname) | mysql_select_db($dbname) |
mysqli_real_escape_string($db,$data) | mysql_real_escape_string($data) |
يمكنك استخدام البحث والاستبدال لكل سكر بالطريقة المشابهة للسطر التالي:
mysqli_query( by mysqli_query($db,