PHP MySQLالوظائف: mysqli_query و mysqli_connect
⚡ ملخص ذكي
MySQLتتيح لغة PHP وغيرها من طرق الوصول إلى قواعد البيانات لبرنامج PHP الاتصال بقاعدة البيانات، وتنفيذ الاستعلامات، وقراءة النتائج. يشرح هذا الدليل وظائف mysqli الأساسية، وأمثلة كاملة لعمليات CRUD، والعبارات المُجهزة لأغراض الأمان، وطرق الوصول البديلة PDO وODBC.

تحتوي لغة PHP على مجموعة غنية من الدوال المدمجة لمعالجة البيانات MySQL قواعد بيانات.
دالة PHP mysqli_connect
تُستخدم دالة mysqli_connect في لغة PHP للاتصال بـ MySQL خادم قاعدة البيانات.
يحتوي على الصيغة التالية.
<?php $db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password); ?>
هنا،
- "$db_handle" هو متغير مورد اتصال قاعدة البيانات.
- الدالة "mysqli_connect(…)" هي دالة الاتصال بقاعدة بيانات PHP
- "$db_server_name" هو اسم أو عنوان IP للخادم الذي يستضيف MySQL الخادم.
- "$db_user_name" هو اسم مستخدم صالح في MySQL الخادم.
- كلمة المرور "$db_password" هي كلمة مرور صالحة مرتبطة باسم مستخدم في MySQL الخادم.
دالة PHP mysqli_select_db
يتم استخدام الدالة mysqli_select_db لتحديد قاعدة البيانات.
يحتوي على الصيغة التالية.
<?php mysqli_select_db($db_handle, $database_name); ?>
هنا،
- "mysqli_select_db(…)" هي دالة اختيار قاعدة البيانات التي ترجع القيمة true أو false
- "$db_handle" هو رابط اتصال الخادم
- "$database_name" هو اسم قاعدة البيانات
دالة PHP mysqli_query
يتم استخدام دالة mysqli_query لتنفيذ SQL استفسار.
يمكن استخدام هذه الوظيفة لتنفيذ أنواع الاستعلامات التالية:
- إدراج
- اختر
- تحديث
- حذف
يحتوي على الصيغة التالية.
<?php mysqli_query($db_handle, $query); ?>
هنا،
- "mysqli_query(…)" هي الوظيفة التي تقوم بتنفيذ استعلامات SQL.
- "$db_handle" هو رابط اتصال الخادم
- "$query" هو استعلام SQL الذي سيتم تنفيذه
دالة PHP mysqli_num_rows
يتم استخدام الدالة mysqli_num_rows للحصول على عدد الصفوف التي تم إرجاعها من استعلام تحديد.
يحتوي على الصيغة التالية.
<?php mysqli_num_rows($result); ?>
هنا،
- "mysqli_num_rows(…)" هي دالة عدد الصفوف
- "$result" هي مجموعة نتائج mysqli_query
دالة PHP mysqli_fetch_array
تُستخدم الدالة mysqli_fetch_array لجلب مصفوفات الصفوف من مجموعة نتائج الاستعلام.
يحتوي على الصيغة التالية.
<?php mysqli_fetch_array($result); ?>
هنا،
- "mysqli_fetch_array(…)" هي الدالة الخاصة بجلب صفوف البيانات
- "$result" هي النتيجة التي تم إرجاعها بواسطة دالة mysqli_query.
دالة PHP mysqli_close
يتم استخدام الدالة mysqli_close لإغلاق اتصال قاعدة البيانات المفتوحة.
يحتوي على الصيغة التالية.
<?php mysqli_close($db_handle); ?>
هنا،
- الدالة "mysqli_close(…)" هي دالة PHP التي تغلق الاتصال
- "$db_handle" هو مورد اتصال الخادم
PHP MySQL أمثلة على عمليات CRUD
دعونا نلقي نظرة على أمثلة عملية تستفيد من هذه الوظائف. يفترض هذا الدرس معرفة مسبقة بـ MySQL وSQL؛ إذا كانت هذه المصطلحات غير مألوفة لديك، فارجع إلى قسمنا MySQL ودروس SQL.
سنقوم بإنشاء قاعدة بيانات بسيطة باسم my_personal_contacts تحتوي على جدول واحد فقط. اتصل بـ MySQL باستخدام أداة الوصول المفضلة لديك مثل MySQL في Workbench أو phpMyAdmin، قم بإنشاء قاعدة بيانات باسم my_personal_contacts، ثم قم بتنفيذ البرنامج النصي الموضح أدناه لإنشاء الجدول وإدراج بعض البيانات الوهمية.
CREATE TABLE IF NOT EXISTS `my_contacts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(255) NOT NULL, `gender` varchar(6) NOT NULL, `contact_no` varchar(75) NOT NULL, `email` varchar(255) NOT NULL, `city` varchar(255) NOT NULL, `country` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES (1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'), (2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'), (3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'), (4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');
قراءة السجلات من قاعدة البيانات
سنقوم الآن بإنشاء برنامج يقوم بطباعة السجلات من قاعدة البيانات.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "SELECT * FROM my_contacts"; // SQL select query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Database access failed: " . mysqli_error($dbh)); $rows = mysqli_num_rows($result); // get number of rows returned if ($rows) { while ($row = mysqli_fetch_array($result)) { echo 'ID: ' . $row['id'] . '<br>'; echo 'Full Names: ' . $row['full_names'] . '<br>'; echo 'Gender: ' . $row['gender'] . '<br>'; echo 'Contact No: ' . $row['contact_no'] . '<br>'; echo 'Email: ' . $row['email'] . '<br>'; echo 'City: ' . $row['city'] . '<br>'; echo 'Country: ' . $row['country'] . '<br><br>'; } } mysqli_close($dbh); // close the database connection ?>
يؤدي تنفيذ الكود أعلاه إلى إرجاع النتائج الموضحة في الرسم البياني أدناه.
إدخال سجلات جديدة
لنلقِ نظرة الآن على مثال يُضيف سجلاً جديداً إلى جدولنا. يُوضح الكود أدناه كيفية تنفيذ ذلك.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)"; $sql_stmt .= " VALUES(7,8,9,10,11,12)"; $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Adding record failed: " . mysqli_error($dbh)); echo "Poseidon has been successfully added to your contacts list"; mysqli_close($dbh); // close the database connection ?>
عند تنفيذ الكود أعلاه، ستظهر لك رسالة "تمت إضافة بوسيدون بنجاح إلى قائمة جهات اتصالك". ارجع إلى مثال استعلام التحديد واسترجع جهات اتصالك مرة أخرى للتأكد من إضافة بوسيدون إلى قائمتك.
تحديث السجلات
لنلقِ نظرة الآن على مثال يُحدِّث سجلاً في قاعدة البيانات. لنفترض أن بوسيدون قد غيّر رقم هاتفه وعنوان بريده الإلكتروني.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9"; $sql_stmt .= " WHERE `id` = 5"; // SQL update query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Updating record failed: " . mysqli_error($dbh)); echo "ID number 5 has been successfully updated"; mysqli_close($dbh); // close the database connection ?>
حذف السجلات
لنلقِ نظرة الآن على مثالٍ لحذف سجلات من قاعدة البيانات. لنفترض أن فينوس لديها أمر تقييدي ضدنا، ويجب علينا حذف معلومات الاتصال الخاصة بها من سجلاتنا. قاعدة بيانات.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $id = 4; // Venus's ID in the database $sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Deleting record failed: " . mysqli_error($dbh)); echo "ID number $id has been successfully deleted"; mysqli_close($dbh); // close the database connection ?>
منع حقن SQL باستخدام العبارات المُجهزة
تُنشئ أمثلة CRUD المذكورة أعلاه الاستعلامات عن طريق دمج السلاسل النصية. عندما يأتي أي جزء من الاستعلام من مُدخلات المستخدم، يُصبح ذلك ثغرة أمنية تسمح بحقن SQL. تُعالج العبارات المُجهزة هذه المشكلة عن طريق إرسال الاستعلام والبيانات بشكل منفصل، بحيث لا يُمكن للمُدخلات تغيير بنية الاستعلام.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); $stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $name, $email); $name = 'Poseidon'; $email = 'poseidon@sea.oc'; mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($dbh); ?>
هنا، تُستخدم علامات الاستفهام كعناصر نائبة، ويقوم bind_param بربط قيمتي الاسم والبريد الإلكتروني بأمان. تتعامل قاعدة البيانات معهما كبيانات عادية، ولذلك تُعدّ العبارات المُجهزة، المتوفرة في كلٍ من mysqli وPDO، الطريقة المُوصى بها لتنفيذ أي استعلام يستخدم مُدخلات المستخدم.
كائن الوصول إلى البيانات في PHP (PDO)
PDO هي فئة تسمح لنا بالتعامل مع محركات قواعد البيانات المختلفة مثل MySQL, PostgreSQL، وخادم MS SQL باستخدام نفس الواجهة.
يوضح الكود أدناه طريقة الوصول إلى قاعدة البيانات باستخدام كائن PDO.
ملاحظة: يفترض الكود أدناه معرفة بلغة SQL والمصفوفات ومعالجة الاستثناءات وحلقة foreach.
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"'); $sql_stmt = "SELECT * FROM `my_contacts`"; $result = $pdo->query($sql_stmt); $result->setFetchMode(PDO::FETCH_ASSOC); $data = array(); foreach ($result as $row) { $data[] = $row; } print_r($data); } catch (PDOException $e) { echo $e->getMessage(); } ?>
هنا،
- "try{…}catch{…}" هي كتلة معالجة الاستثناءات
- "$pdo = new PDO("mysql..." يقوم بإنشاء مثيل لكائن PDO ويمرر برنامج تشغيل قاعدة البيانات وأسماء الخادم وقاعدة البيانات ومعرف المستخدم وكلمة المرور.
- يُفعّل الأمر "$pdo->setAttribute…" وضع أخطاء PDO لطرح الاستثناءات.
- يُحدد الأمر "$pdo->exec('SET NAMES…'" تنسيق الترميز
الوصول إلى البيانات باستخدام PHP ODBC
ODBC هو اختصار لـ Open Database Connectivity (الاتصال بقاعدة البيانات المفتوحة). وله الصيغة الأساسية التالية.
<?php $conn = odbc_connect($dsn, $user_name, $password); ?>
هنا،
- "odbc_connect" هي دالة مضمنة في لغة PHP
- "$dsn" هو اسم مصدر بيانات ODBC.
- يُعدّ "$user_name" اختياريًا ويُستخدم لاسم مستخدم ODBC
- كلمة المرور "$password" اختيارية وتُستخدم لكلمة مرور ODBC
يفترض المثال أدناه أنك تستخدم Windows وقد أنشأنا رابط ODBC إلى نورث ويند Microsoft قاعدة بيانات الوصول المسماة نورث ويند.
<?php $dbh = odbc_connect('northwind', '', ''); if (!$dbh) { exit("Connection Failed: " . $dbh); } $sql_stmt = "SELECT * FROM customers"; $result = odbc_exec($dbh, $sql_stmt); if (!$result) { exit("Error accessing records"); } while (odbc_fetch_row($result)) { $company_name = odbc_result($result, "CompanyName"); $contact_name = odbc_result($result, "ContactName"); echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>"; } odbc_close($dbh); ?>

