مقدمة MySQL
تعتبر لغة MySQL أشهر نظام قواعد بيانات مفتوح المصدر .
ماهي لغة MySQL ؟
ان MySQL لغة خاصة بقواعد البيانات .
تخزن البيانات في MySQL في كائنات قواعد بيانات تسمى جداول .
ان الجدول هو عبارة عن مجموعة من البيانات المدخلة و المتصلة كما يتألف الجدول من أعمدة و صفوف .
تعتبر قواعد البيانات مفيدة جداً عند تخزين المعلومات بشكل تصنيفي أي عند استخدام شركة لقواعد البيانات يمكن أن تستخدم الجداول التالية :
"Employees" و "Products" و "Customers" و "Orders" .
جداول قواعد البيانات
تحتوي غالباً قواعد البيانات على جدول او أكثر يتم تعريف كل جدول باسم مثل (Customers أو Orders ) . كما يحتوي الجدول على صفوف تمسى rows أو records بالاضافة الى البيانات .
في المثال التالي جدول يسمى Persons .
| FirstName | LastName | Address | Country |
|---|---|---|---|
| Ahmad | Jasem | Timoteivn 10 | KSA |
| Samer | Masri | Borgvn 23 | SAR |
| Fuad | Alasad | Storgt 20 | TUR |
يحتوي الجدول السابق على 4 أعمدة و 3 صفوف لكل شخص صف يتألف من الاسم و الكنية و العنوان و الدولة .
الأوامر Queries
الأوامر هي عبارة عن طلبات أو أسئلة .
باستخدام MySQL يمكن تقديم أوامر لقواعد البيانات معلومات معينة والتي تحتوي على امكانية تقديم النتائج من خلال الصفوف أو الأعمدة .
لاحظ الأمر التالي :
SELECT LastName FROM Persons
يختار الأمر السابق جميع البيانات الموجودة في عمود الكنية LastName من الجدول المسمى Persons ثم سيقوم بإعادة النتيجة كالتالي :
| LastName |
|---|
| Jasem |
| Masri |
| Alasad |
تحميل قواعد البيانات MySQL
اذا لم يكن لديك تطبيق يحتوي على PHP مع قواعد البيانات MySQL يمكنك تحميلها من موقعها الرسمي من خلال الرابط التالي : http://www.mysql.com/downloads/
حقائق حول قواعد البيانات MySQL
أحد الحقائق المذهلة عن MySQL أنها تقوم بتخزين البيانات الضمنية الموجودة في التطبيقات و هذه الحقيقة مذهلة بسبب أم معظم الناس تعتقد أن MySQL تستخدم فقط مع التطبيقات التي تخزن بيانات صغيرة أو متوسطة .
لكن الحقيقة بأن MySQL تستخدم مع قواعد بيانات مع مواقع الانترنت التي تستخدم لتخزين هائل للبيانات و المستخدمين مثل Friendster و Yahoo و Google .
لمشاهدة الشركات التي تستخدم MySQL لقواعد البيانات من خلال الرابط التالي :
http://www.mysql.com/customers/
الاتصال مع قاعدة البيانات MySQL
تستخدم عادة MySQL مع لغة PHP .
إنشاء اتصال لقاعدة البيانات MySQL
قبل الوصول الى البيانات في قاعدة البيانات يجب إنشاء اتصال مع قاعدة البيانات .
باستخدام لغة PHP يمكن انشاء اتصال مع قاعدة البيانات من خلال الوظيفة mysql_connect() .
التركيبة
mysql_connect(servername,username,password);
| المتغيرات | الشرح |
|---|---|
| servername | اختياري . يحدد وجهة الاتصال مع السيرفر و غالباً مايكون localhost |
| username | اختياري . يحدد اسم المستخدم مع السيرفر . يمكن استخدام افتراضياً root . |
| password | اخيتاري . يحدد كلمة المرور مع السيرفر و غالباً ماتكون فارغة اذا لم تعيين كلمة مرور خاصة مسبقاً . |
ملاحظة : هناك الكثير من القيم المستخدمة مع قواعد البيانات ولكن في الجدول أهمها فقط لكن لمزيد من المعلومات يمكنك زيارة مراجع PHP MySQL .
مثال
في المثال التالي سنقوم بتخزين الاتصال مع قاعدة البيانات من خلال المتغير $con من أجل استخدامات لاحقة في السكربت بالاضافى الى استخدام die() من أجل معرفة نوع الخطأ مع قواعد البيانات في حال فشل الاتصال :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
?>
إنهاء الاتصال
سيتم اغلاق الاتصال بشكل تلقائي عند انتهاء السكربت لكن اذا أردت انهاء الاتصال يمكن استخدام الوظيفة mysql_close() :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
mysql_close($con);
?>
تحتوي قاعدة البيانات على جدول أو اكثر .
إنشاء قاعدة بيانات
يمكن إنشاء قاعدة بيانات من خلال التعبير CREATE DATABASE .
التركيبة
CREATE DATABASE database_nameلاستخدام التعبير يمكن استخدام الوظيفة mysql_query() و بهذه الوظيفة يمكن استخدام لارسال الأوامر الى الاتصال مع MySQL .
مثال
في المثال التالي سنقوم بإنشاء قاعدة بيانات تسمى my_db
<?php
$con = mysql_connect("localhost","root","root");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
} else {
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
إنشاء جدول
يمكن إنشاء قاعدة بيانات من خلال التعبير CREATE TABLE .
التركيبة
CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, .... )لإنشاء الأمر يجب اضافة التعبير CREATE TABLE الى الوظيفة mysql_query() .
مثال
في المثال التالي سيتم إنشاء جدول مسمى Persons مع ثلاثة أعمدة . ستكون أسماء الأعمدة كالتالي FirstName و LastName و Age :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>
ملاحظة هامة
- يجب اختيار قاعدة البيانات قبل إنشاء الجدول حيث يمكن اختيار قاعدة البيانات من خلال الوظيفة mysql_select_db() .
- عند إنشاء حقل قاعدة بيانات بنوع varchar , يجب تحديد الحد الأقصى للطول في الحقل مثل varchar(15) .
- تحدد نوع البيانات نوع العمود الذي سيقوم بحمل البيانات فيها .
الحقول Primary Keys و Auto Increment
يجب أن يحتوي كل حقل على وسم أساسي Primary Keys .
يستخدم primary key لتحديد فريد ومميز للصفوف في الجدول . يجب أن يكون primary key فريد ضمن الجدول بالاضافة بأن primary key لايجب أن يكون فارغ null لأن محرك قاعدة البيانات يحتاج الى قيمة لتحديد مكان الصف في الجدول .
في المثال التالي سيتم تحديد حقل لعنوان id للجدول personID مثل حقل primary key . غالباً مايكون primary key يحتوي على رقم ID و غالباً مايكون مع AUTO_INCREMENT . تزيد AUTO_INCREMENT تلقائياً قيمة الحقل برقم واحد في كل مرة يزيد عدد الصفوف . وذلك للتأكد بأن primary key ليس فارغاً null يجب تحديد ضبط بأن القيمة غير فارغة NOT NULL .
مثال
$sql = "CREATE TABLE Persons ( personID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(personID), FirstName varchar(15), LastName varchar(15), Age int )"; mysql_query($sql,$con);
ادراج بيانات الى جدول قاعدة البيانات
تستخدم INSERT INTO لإدراج صف جديد في الجدول .
التركيبة
من الممكن كتابة التعبير INSERT INTO من خلال طريقتين .
لايحدد الشكل الأول اسماء الأعمدة حيث سيتم ادراج البيانات فقط قيمهم :
INSERT INTO table_name VALUES (value1, value2, value3,...)
يحدد الشكل الثاني كلاً من اسماء الأعمدة و قيمهم التي سيتم ادراجها :
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)لاستخدام التعابير السابقة بشكل جيد يمكن استخدام الوظيفة mysql_query() حيث سيتم ارسال الأوامر و الطلبات الى الاتصال الخاص مع MySQL .
مثال
في الدرس السابق قمنا بإنشاء جدول باسم Persons مع ثلاثة أعمدة Firstname و Lastname و Age كما سنقوم باستخدام نفس الجدول في هذا المثال . يضيف المثال التالي صف جديد للجدول Persons :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Root', 'Griffin', '35')");
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");
mysql_close($con);
?>
ادراج بيانات من نموذج الى قاعدة البيانات
الآن سنقوم بإنشاء نموذج HTML والذي بدوره سيقوم بإضافة صف جديد للجدول Persons .
هنا كود نموذج HTML :
<html> <body> <form action="insert.php" method="post"> Firstname: <input type="text" name="firstname" /> Lastname: <input type="text" name="lastname" /> Age: <input type="text" name="age" /> <input type="submit" /> </form> </body> </html>
عند ضغط المستخدم على زر الارسال في نموذج HTML سيتم ارسال المعلومات الى الملف insert.php .
يقوم الملف insert.php بالاتصال بقاعدة البيانات ثم يحوّل المعلومات المسجلة في النموذج الى متغيرات $_POST .
ثم يرسل mysql_query() أمراً الى INSERT INTO ليتم ادراج صف جديد الى جدول Persons .
هناالكود الموجود في صفحة insert.php :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
اختيار البيانات من جدول قاعدة البيانات
يستخدم التعبير SELECT لاختيار البيانات من قاعدة البيانات .
التركيبة
SELECT column_name(s) FROM table_nameلاستخدام التعبير يمكن استخدام الوظيفة mysql_query() و بهذه الوظيفة يمكن استخدام لارسال الأوامر الى الاتصال مع MySQL .
مثال
يختار المثال التالي جميع البيانات المخزنة في جدول Persons ( تستخدم الاشارة * لاختيار جميع البيانات الموجودة في الجدول ) :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
mysql_close($con);
?>
يخزن المثال السابق البيانات العائدة من خلال الوظيفة mysql_query() في المتغير $result . ثم سنقوم باستخدام mysql_fetch_array() لاسترجاع الصف الثاني من صفوف الجدول . أما الحلقة while فإنها ستدور حول جميع الصفوف في جدول البيانات وتقدم النتيجة .
لعرض النتيجة لجميع الصفوف يمكن استخدام متغير $row كالتالي :
($row['FirstName'] and $row['LastName'])
ستظهر النتيجة كالتالي :
Ahmad Jasem Samer Masri Fuad Alasad
عرض النتيجة في جدول HTML
يختار المثال التالي نفس البيانات في المثال السابق لكن سيتم عرض البيانات في جدول HTML كالتالي :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
ستظهر النتيجة على المتصفح كالتالي
| FirstName | LastName |
|---|---|
| Ahmad | Jasem |
| Samer | Masri |
| Fuad | Alasad |
عبارة WHERE
تستخدم عبارة WHERE لتحديد صف معين في جدول قاعدة البيانات .
التركيبة
SELECT column_name(s) FROM table_name WHERE column_name operator valueلإنشاء كود PHP لاستخدام التعبير السابق يمكن استخدام mysql_query() و هي تستخدم لارسال الأوامر أو الطلبات الى اتصال MySQL .
مثال
يختار المثال التالي جميع الصفوف من الجدول Persons حيث WHERE الاسم Ahmad
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons
WHERE FirstName=Ahmad");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
?>
ستظهر النتيجة على المتصفح كالتالي
Ahmad Jasem
الترتيب Order By
تستخدم الترتيب ORDER BY لترتيب البيانات المعروضة من قاعدة البيانات .
عند استخدام ORDER BY يكون الترتيب تصاعدي بشكل تلقائي ولكن ان أردت الترتيب بشكل آخر مكن استخدام الكلمة DESC والتي تشكل ترتيب تنازلي .
التركيبة
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESCمثال
يختار المثال التالي جميع البيانات في الجدول Persons ثم يقوم بترتيب الجدول حسب العمر تصاعدياً :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons ORDER BY age");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br />";
}
mysql_close($con);
?>
ستظهر النتيجة على المتصفح كالتالي
Ahmad Jasem33 Samer Masri35
الترتيب من خلال عمودين
أيضاً من الممكن ترتيب أكثر من عمود . عند استخدام الترتيب من خلال أكثر من عمود فإن العمود التاني سيتم استخدامه اذا كانت القيمة الأولى متساوية :
SELECT column_name(s) FROM table_name ORDER BY column1, column2
تحديث البيانات في قاعدة البيانات
تستخدم خاصية التحديث UPDATE للتعديل على البيانات الحالية في الجدول .
التركيبة
UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value
ملاحظة : لاحظ بأن التعبير WHERE يحدد أي الصف أو الصفوف الذي ينبغي تحديثه لكن بينما اذا لم تستخدم WHERE عندها سيتم تحديث جميع الصفوف .
لإنشاء كود PHP لاستخدام التعبير السابق يمكن استخدام mysql_query() و هي تستخدم لارسال الأوامر أو الطلبات الى اتصال MySQL .
مثال
في دروس سابقة قمنا بإنشاء جدول اسمه Persons وها هنا يظهر كالتالي
| FirstName | LastName | Age |
|---|---|---|
| Ahmad | Jasem | 33 |
| Samer | Masri | 35 |
| Fuad | Alasad | 40 |
سيقوم المثال التالي بتحديث بعض البيانات في الجدول Persons :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("UPDATE Persons SET Age = '36'
WHERE FirstName = 'Ahmad' AND LastName = 'Jasem'");
mysql_close($con);
?>
بعد التحديث سيبدو الجدول كالتالي
| FirstName | LastName | Age |
|---|---|---|
| Ahmad | Jasem | 36 |
| Samer | Masri | 35 |
| Fuad | Alasad | 40 |
حذف بيانات من قاعدة البيانات
يستخدم التعبير DELETE FROM لحذف بيانات من جدول قاعدة البيانات .
التركيبة
DELETE FROM table_name WHERE some_column = some_value
ملاحظة : لاحظ بأن التعبير WHERE يستخدم مع تركيبة الحذف DELETE لتحديد معين أي البيانات التي سيتم حذفها من الجدول ولكن ان لم تستخدم WHERE سيتك حذف جميع صفوف الجدول .
لإنشاء كود PHP لاستخدام التعبير السابق يمكن استخدام mysql_query() و هي تستخدم لارسال الأوامر أو الطلبات الى اتصال MySQL .
مثال
لاحظ الجدول في هذا المثال التالي
| FirstName | LastName |
|---|---|
| Ahmad | Jasem |
| Samer | Masri |
| Fuad | Alasad |
يحذف المثال التالي البيانات من الجدول Persons حيث where الكنية LastName='Griffin' :
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("DELETE FROM Persons WHERE LastName='Masri'");
mysql_close($con);
?>
بعد الحذف سيصبح الجدول كالتالي
| FirstName | LastName |
|---|---|
| Ahmad | Jasem |
| Fuad | Alasad |
قاعدة البيانات ODBC
تعتبر ODBC ( فتح الاتصال بقواعد البيانات ) واجهة لبرنامج برمجي API حيث تسمح لك بالاتصال على مصدر البيانات مثل قاعدة البيانات Access الخاصة بمايكروسوفت .
إنشاء اتصال ODBC
باستخدام اتصال ODBC يمكنك الاتصال بأي قاعدة بيانات على أي حاسوب متصل بالشبكة طالما ODBC متوفر .
الآن سنتعرف على الخطوات التي يمكن إنشاء اتصال ODBC مع قواعد البيانات MS Access :
- الضغط على أيقونة Administrative Tools في لوحة التحكم .
- النقر المزدوج على أيقونة Data Sources (ODBC).
- اختر شريط System DSN .
- اضغط على إضافة في شريط نظام DNS .
- اختر Microsoft Access Driver ثم اضغط انتهاء .
- في الشاشة المقابلة اضغط على اختيار للوصول الى قاعدة البيانات .
- تقديم اسم لقاعدة البيانات Data Source Name (DSN) .
- اضغط على OK .
لاحظ بأن التفعيل سيتم على الحاسوب في مكان الموقع المستخدم . اذا كنت تستخدم IIS على حاسوبك عندها ستعمل الخطوات السابقة أما اذا كنت تعمل على سيرفر على الانترنت عندها ستحتاج الى صلاحيات لذلك السيرفر أو يمكنك طلب الصلاحيات من مزود الخدمة Host للحصول على ضبط DNS .
الاتصال مع ODBC
تستخدم الوظيفة odbc_connect() للاتصال مع مصدر البيانات . يمكن استخدام أربع متغيرات مع الكود الوظفي اسم مصدر البيانات و username و password و نوع البيانات ( اختياري ) .
يستخدم odbc_exec() لعرض نتائج تعابير SQL .
مثال
في المثال التالي سنقوم بإنشاء اتصال DNS يسمى northwind مع اسم المستخدم وكلمة المرور ثم سيتم عرض نتيجة SQL :
$conn=odbc_connect('northwind','','');$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
استرجاع الصفوف
يستخدم odbc_fetch_row() لاسترجاع الصفوف من الجدول .
يستخدم هذا الكود الوظيفي متغيرين وهما : محدد نتيجة ODBC و رقم الصف ( اختياري ) .
odbc_fetch_row($rs)
استرجاع الحقول من الصفوف
يستخدم odbc_result() لقراءة الحقول ويأخذ الكود متغيرين : محدد نتيجة ODBC و رقم أو اسم الصف .
يسترجع الكود التالي القيمة من الحقل الأول من صفوف الجدول :
$compname=odbc_result($rs,1);
يسترجع الكود التالي القيمة من الحقل CompanyName :
$compname=odbc_result($rs,"CompanyName");
اغلاق الاتصال ODBC
يمكن استخدام odbc_close() لإغلاق الاتصال .
odbc_close($conn);
مثال ODBC
يظهر المثال التالي كيفية إنشاء قاعدة بيانات ثم ضبط النتائج ثم عرضها على المتصفح بجدول HTML :
<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{ exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>