الدرس 20: استرجاع البيانات من قاعدة البيانات

الآن علينا استرجاع البيانات من قاعدة البيانات لنضعها في صفحات PHP.

هذا هو أحد أهم الدروس، عندما تقرأ وتفهم هذا الدرس ستدرك لم حلول مواقع الويب المعتمدة على قواعد البيانات قوية ونظرتك لتطوير المواقع ستتسع بشكل كبير.

استعلامات SQL

لاسترجاع البيانات من قاعدة البيانات سنستخدم الاستعلامات، مثال الاستعلام قد يكون بهذا الشكل: "استرجع كل البينات من جدول 'people' مرتبة أبجدياً" أو "استرجع كل الأسماء من جدول 'people' ".

مرة أخرى، لغة Structured Query Language أو (SQL) تستخدم للتواصل مع قواعد البيانات، انظر إلى المثال البسيط:


	Get all data from the table 'people'
	
	

Will be written like this in SQL:


	SELECT * FROM people
	
	

المثال يشرح نفسه، أكمل القراءة لترى كيف يستخدم استعلام SQL الأمثلة أدناه.

مثال 1: استرجاع البيانات من قاعدة البيانات

هذا المثال يستخدم قاعدة البيانات والجدول من الدرس 19 والدرس 18، لذلك من المهم أن تقرأ هذه الدروس أولاً.

المثال يوضح كيف أن البيانات في جدول "people" من خلال استعلام SQL.

استعلام SQL يعود بسلسلة نتائج على شكل سجلات، هذه السجلات تخزن في ما يسمى recordset أو مجموعة السجلات وهو ما يمكن وصفه بجدول في ذاكرة المزود يحوي صفوفاً من البيانات (سجلات) وكل سجل مقسم إلى حقول أو اعمدة.

مجموعة السجلات يمكن مقارنتها بجدول حيث كل سجل يمكن مقارنته بصف في الجدول، في PHP يمكننا أن نمرر مجموعة السجلات في حلقة ووظيفة توثيقmysql_fetch_array التي تعطينا كل صف كمصفوفة.

المثال أدناه يوضح كيف تستخدم وظيفة توثيقmysql_fetch_array للتعامل مع مجموعة السجلات:


	<html>
	<head>
	<title>Retrieve data from database </title>
	</head>
	<body>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);
	
	// Loop the recordset $rs
	// Each row will be made into an array ($row) using mysql_fetch_array
	while($row = mysql_fetch_array($rs)) {

	   // Write the value of the column FirstName (which is now in the array $row)
	  echo $row['FirstName'] . "<br />";

	  }

	// Close the database connection
	mysql_close();
	?>
	</body>
	</html>
	
	

لاحظ كيف نستخرج البيانات من عمود "FirstName" بكتابة $row['FirstName']، بنفس الطريقة يمكننا استخراج بيانات عمود "Phone" بكتابة $row['Phone'].

ترتيب مجموعة السجلات هو نفس ترتيبها في الجدول داخل قاعدة البيانات، لكن في المثال التالي سنوضح كيف يمكن إعادة ترتيب مجموعة السجلات.

المثال 2: ترتيب البيانات أبجدياً، زمنياً أو حسب الأعداد

غالباً من المفيد عرض قائمة أو جدول بيانات بترتيب أبجدي أو زمني أو بحسب الأرقام، هذا الترتيب يمكن إنجازه بسهولة في SQL، حيث طريقة كتابته Order By ColumnName تستخدم لترتيب المحتويات بحسب محتويات أحد أعمدة الجدول.

أنظر إلى استعلام SQL التالي:


	strSQL = "SELECT * FROM people"
	
	

السجلات يمكن ترتيبها مثلاً أبجدياً بحسب الاسم الأول للأشخاص بهذه الطريقة:


	strSQL = "SELECT * FROM people ORDER BY FirstName"
	
	

أو زمنياً بحسب تاريخ الميلاد بهذا الشكل:


	strSQL = "SELECT * FROM people ORDER BY BirthDate"
	
	

يمكن تغيير الترتيب من تصاعدي إلى تنازلي بإضافة DESC:


	strSQL = "SELECT * FROM people ORDER BY BirthDate DESC"
	
	

في المثال التالي الأشخاص يعرضون في قائمة مرتبة بحسب العمر:

	<html>
	<head>

	<title>Retrieve data from database </title>

	</head>
	<body>
	
	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people ORDER BY BirthDate DESC";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);
	
	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Write the value of the column FirstName and BirthDate
	  echo $row['FirstName'] . " " . $row['BirthDate'] . "<br />";

	  }

	// Close the database connection
	mysql_close();
	?>

	</body>
	</html>
	
	

جرب تغيير استعلام SQL بنفسك ورتب السجلات بحسب الاسم الأول أو الاسم الأخير أو رقم الهاتف.

استرجاع معلومات مختارة

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

لنقل بأننا نريد استرجاع بيانات للناس الذين يملكون رقم الهاتف "66554433"، يمكننا فعل ذلك بهذا الشكل:


	strSQL = "SELECT * FROM people WHERE Phone = '66554433 '"
	
	

هناك 6 عوامل (operators) اتصال في SQL:

= يساوي
< أصغر من
> أكبر من
<= أصغر من أو يساوي
>= أكبر من أو يساوي
!= لا يساوي

بالإضافة لذلك هناك عوامل منطق:

AND
OR
NOT

راجع الدرس 6 للمزيد من المعلومات حول كيفية استخدام الشروط والعوامل.

في المثال التالي سنستخدم الشروط لإنشاء دفتر عناوين.

مثال 3: دفتر عناوين

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

لهذا نحن بحاجة لملفين - list.php وperson.php - يحويان هذا الكود:

الكود في list.php


	<html>
	<head>
	<title>Retrieve data from the database</title>
	</head>
	<body>

	<ul>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);
	
	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Name of the person
	  $strName = $row['FirstName'] . " " . $row['LastName'];

	   // Create a link to person.php with the id-value in the URL
	   $strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" . $strNavn . "</a>";

	    // List link
	   echo "<li>" . $strLink . "</li>";

	  }

	// Close the database connection
	mysql_close();
	?>

	</ul>
	</body>
	</html>

	
	

الكود في person.php

	<html>
	<head>
	<title>Retrieve data from database</title>
	</head>
	<body>

	<dl>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// Get data from the database depending on the value of the id in the URL
	$strSQL = "SELECT * FROM people WHERE id=" . $_GET["id"];
	$rs = mysql_query($strSQL);
	
	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

		// Write the data of the person
		echo "<dt>Name:</dt><dd>" . $row["FirstName"] . " " . $row["LastName"] . "</dd>";
		echo "<dt>Phone:</dt><dd>" . $row["Phone"] . "</dd>";
		echo "<dt>Birthdate:</dt><dd>" . $row["BirthDate"] . "</dd>";

	}

	// Close the database connection
	mysql_close();
	?>

	</dl>
	<p><a href="list.php">Return to the list</a></p>

	</body>

	</html>
	
	

مثال دفتر العناوين بسيط إلى حد ما، لكن يظهر لنا الإمكانيات المتوفرة عند العمل مع PHP وقواعد البيانات.

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

أهلاً بك في عالم المواقع الواسعة التي يسهل تطويرها وصيانتها، عندما تتعلم العمل مع قواعد البيانات فلن تكون حلول الويب الخاصة بك مثلما كانت من قبل.



<< Lesson 19: إدخال البيانات في قاعدة البيانات

Lesson 21: حذف بيانات في قاعدة بيانات >>