PHP MySQLالوظائف: mysqli_query و mysqli_connect

⚡ ملخص ذكي

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

  • ؟؟؟؟ توصيل: يفتح mysqli_connect رابطًا إلى MySQL يقوم الخادم، و mysqli_select_db باختيار قاعدة البيانات التي سيتم العمل معها.
  • 🗃️ تشغيل الاستعلامات: تقوم mysqli_query بتنفيذ عبارات INSERT و SELECT و UPDATE و DELETE على قاعدة البيانات المحددة.
  • 📄 نتائج القراءة: تقوم الدالة mysqli_num_rows بحساب عدد الصفوف المُعادة، وتقوم الدالة mysqli_fetch_array بقراءة كل صف في مصفوفة للإخراج.
  • 🔄 الخام Operaنشوئها: تقوم هذه الوظائف مجتمعة بإنشاء وقراءة وتحديث وحذف السجلات، وهي العمليات الأساسية الأربع لقاعدة البيانات.
  • 🛡️ البيانات المعدة مسبقاً: يؤدي ربط القيم بالعبارات المُجهزة إلى منع حقن SQL، على عكس بناء الاستعلامات عن طريق دمج مدخلات المستخدم.
  • 🧩 PDO و ODBC: يوفر PDO واجهة واحدة للعديد من محركات قواعد البيانات، بينما يتصل ODBC بمصادر مثل Microsoft التمكن من.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي تحويل كود mysqli القديم إلى PDO مع عبارات مُعدة مسبقًا وتصحيح أخطاء الاتصال.

PHP MySQL الوصول إلى قاعدة البيانات

تحتوي لغة 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: MySQL وظائف

إدخال سجلات جديدة

لنلقِ نظرة الآن على مثال يُضيف سجلاً جديداً إلى جدولنا. يُوضح الكود أدناه كيفية تنفيذ ذلك.

<?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);
?>

الأسئلة الشائعة

لا يعمل mysqli إلا مع MySQL ويوفر كلاً من الأنماط الإجرائية والبرمجية. يعمل PDO مع العديد من قواعد البيانات من خلال واجهة واحدة، ويدعم العناصر النائبة المسماة. يدعم كلا النمطين العبارات المُجهزة؛ ويتميز PDO بسهولة نقله بين محركات قواعد البيانات المختلفة.

لا. تمت إزالة امتداد mysql_* الأصلي في PHP 7. استخدم mysqli أو PDO بدلاً منه. كلاهما مدعوم باستمرار، ويدعمان العبارات المُجهزة، ويحمي من مخاطر حقن الثغرات التي كان يسببها الامتداد القديم.

قم برصد الخطأ وعرض رسالة عامة للمستخدم مع تسجيل التفاصيل بشكل خاص. لا تعرض مخرجات mysqli_error للزوار، لأنها قد تكشف أسماء الجداول وبنيتها، وهو أمر مفيد للمهاجم.

نعم. قم بلصق نص mysqli، ويمكن للذكاء الاصطناعي إعادة كتابته باستخدام PDO، واستبدال الاستعلامات المتسلسلة بمعاملات مرتبطة، وإضافة معالجة الأخطاء باستخدام try-catch. Revراجع العناصر النائبة واختبر كل استعلام بعد ذلك.

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

تلخيص هذه التدوينة بـ: