تحديد البيانات في MySQL

Ali Majrashiمنذ 7 سنوات

نستخدم جملة SELECT عند بناء جملة SQL لتحديد البيانات من جدول او عدة جداول لعرضها.

نستطيع تحديد مسميات الأعمدة Columns المراد عرض بياناتها مثال:


SELECT column_name(s) FROM table_name

أو نستطيع تحديد جميع الأعمدة لعرض بياناتهم باستخدام علامة النجمة * مثال:


SELECT * FROM table_name

يجب ان تكون لديك معرفة في بناء جمل SQL ؛ لتستطيع تنفيذ مختلف العمليات على قواعد البيانات ، حيث انه طريقة تنفيذ هذه الجمل هي واحدة في PHP ، تختلف النتيجة باختلاف الجملة المنفذة فقط.

تحديد البيانات:

في هذه الأمثلة سوف نقوم بتحديد كل من id و name و email من الجدول users وعرضها بالمتصفح.

مثال على MySQLi Object-Oriented:


<?php

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "new-DB";

// إجراء الإتصال
$conn = new mysqli($servername, $username, $password, $dbname);

// التحقق من الإتصال
if ($conn->connect_error) {
    die("فشل الإتصال: " . $conn->connect_error);
}

// لتحديد البيانات SQL بناء جملة 
$sql = "SELECT id, name, email FROM users";

// تنفيذ الإستعلام
$result = $conn->query($sql);

// التحقق من عدد النتائج
if ($result->num_rows > 0) {
    // نقوم بعرض البيانات للمتصفح
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

// إغلاق الإتصال
$conn->close();

تفصيل عمل الأكواد :

بعد عملية الإتصال بقاعدة البيانات بنجاح ، قمنا ببناء جملة SQL لتحديد كل من id و name و email من الجدول users ، ثم بعدها قمنا بتنفيذ هذه الجملة بواسطة الدالة conn->query$ ، وحفظ النتيجة داخل المتغير result$.

قمنا بالتحقق من عدد النتائج المخزنة في المتغير result$ باستخدام result->num_rows$ ، بداخل الدالة الشرطية if فاذا كان عدد النتائج أكثر من صفر نقوم بعرض هذه النتائج باستخدام حلقة التكرار while loop ، او عرض رسالة بانه لاتوجد نتائج لعرضها.

اذا كان الناتج اكبر من صفر فإننا نقوم بتخزين جميع النتائج على شكل مصفوفة من النوع associative array باستخدام result->fetch_assoc$ في المتغير row$ ، و باستخدام حلقة التكرار while نقوم بالمرور على البيانات المخزنة وعرضها بالمتصفح.

عند عمل الكود بالمتصفح بنجاح سيكون الناتج كالتالي:

select.png

مثال على MySQLi Procedural:


<?php

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "new-DB";

// إجراء الإتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);

// التحقق من الإتصال
if (!$conn) {
    die("فشل الإتصال: " . mysqli_connect_error());
}

// لتحديد البيانات SQL بناء جملة 
$sql = "SELECT id, name, email FROM users";

// تنفيذ الإستعلام
$result = mysqli_query($conn, $sql);

// التحقق من عدد النتائج
if (mysqli_num_rows($result) > 0) {
    // نقوم بعرض البيانات للمتصفح
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

// إغلاق الإتصال 
mysqli_close($conn);

شبيه بطريقة عمل المثال السابق الفرق اننا نستخدم الدوال مباشرة بدل الكلاس.

عند عمل الكود بالمتصفح بنجاح سيكون الناتج كالتالي:

select.png

مثال على PDO:


<?php

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "new-DB";

try {
    // إجراء الإتصال
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // تعديل نوع معالج الأخطاء
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // لتحديد البيانات SQL بناء جملة 
    $stmt = $conn->prepare("SELECT id, name, email FROM users");
    // تنفيذ الإستعلام
    $stmt->execute();

    // تغير نوع المصفوفة للتعامل معها بسهولة
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 

    // نقوم بعرض البيانات للمتصفح
    foreach($stmt->fetchAll() as $key => $value) { 
        echo "id: " . $value["id"]. " - Name: " . $value["name"]. " " . $value["email"]. "<br>";
    }
}
catch(PDOException $e) {
	echo $sql . "<br>" . $e->getMessage();
}

// إغلاق الإتصال 
$conn = null;

لاحظ: في هذا المثال بعد اجراء الإتصال بقاعدة البيانات بنجاح وتخزينه في المتغير conn$ ، قمنا ببناء جملة SQL وتجهيزها وتخزينها بالمتغير stmt$ ، ثم استخدمنا stmt->execute$ لتنفيذ عملية الإستعلام بقاعدة البيانات بدلا من استخدام conn->exec$ ، بعدها قمنا بتغير نوع البيانات الذي نرغب بالتعامل معه الى مصفوفة من نوع associative array بواسطة stmt->setFetchMode$ فهي احد خصائص PDO ، ثم استخدمنا حلقة foreach للمرور على البيانات وعرضها بالمتصفح.

يمكنك معرفة المزيد عن حلقات التكرار وطريقة عملها بواسطة زيارة هذا الدرس.

https://3alam.pro/series/php/php-basics/php-loops/عند عمل الكود بالمتصفح بنجاح سيكون الناتج كالتالي:

select.png

التعليقات (3)

hesa:

استاذ هل هناك اي طريقة سريعة  استطيع التواصل معاك كالايميل او تويتر  لدي اسئلة حول هذه المواضيع واريد احد ان يرشدني ويفهمني

وجزاك الله كل خير ،

Ali Majrashi:
في 12/17/2017 at 16:55, hesa said:

استاذ هل هناك اي طريقة سريعة  استطيع التواصل معاك كالايميل او تويتر  لدي اسئلة حول هذه المواضيع واريد احد ان يرشدني ويفهمني

وجزاك الله كل خير ،

الاسئلة تكون عن طريق الموقع بقسم سؤال وجواب وباذن الله الكل يقدر يجاوب ويساعد بحل المشاكل الي تواجهك

Ibraheem Salem:

يعطيك العافية ع الشرح الرائع

 

ولكن سؤالي هل الـ $row عبارة عن متغير مثل ما تفضلت ولا هي Array لها مسميات الإنديكسات بمسمى العمود في الداتا بيز  والقيمة بها حسب نتيجة كل سطر

 

وشاكر لك حسن تعاونك ومجهودك الكبير

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !