PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : توابع و پرس جوهاي MySQL در يك نگاه



TAHA
11-27-2009, 12:00 AM
در اين مقاله سعي شده تا نگاهي به توابع و پرس و جوهاي ابتدايي MySQL و ساختار MySQL در PHP بياندازيم.

حتما مي دانيد كه زبان SQL كوتاه شده ي عبارت Structured Query Language به معني زبان پرس جوي ساخت يافته (نظم و ترتيب داده شده) است. با اينكه ساختار كلي زبان هاي SQL همانند هم هستند اما هيچ وقت نمي توان پرس جوهاي مثلا MySQL را براي ساير زبان هاي SQL مانند MSQL يا Postgre SQL و... بكار برد.ما در اين مقاله در مورد MySQL صحبت خواهيم كرد:
در كل پرس جوهاي MySQL از جملات بسيار ساده و خوانايي تشكيل شده كه با دانستن ساختار آن براحتي مي توانيد احتياجات خود را برطرف نماييد. البته همين ساختار و جمله بندي ساده ي انگليسي موجب مي شود كه گاهي اوقات پيام هاي خطاي بي موردي را ازطرف بانك اطلاعاتي دريافت نماييم كه معمولا يا يكم دستكاري كد به نتيجه ي دلخواه خواهيم رسيد!.

درضمن براي يادگيري SQL فقط براي نياز خود احتياجي به خواندن كتاب يا ... نيست اما اگر مي خواهيد زبان هاي SQL را به صورت گسترده مطالعه نماييد كتاب "خودآموز SQL در 21 روز" مي تواند مرجع كاملي باشد.

اتصال و انتخاب بانك اطلاعاتي
خوب حالا بريم سر اصل مطلب.:اولين كاري كه در يك اسكريپت بايد انجام بديم اينه كه به بانك اطلاعاتي MySQL خودمون وصل بشيم. اين كار از طريق تابعي با نام MySQL_connect و MySQL_pconnect صورت مي گيرد كه در ادامه فرق اين دو نيز مي خونيد.
تابع MySQL_connect براي انجام كار خود به سه تا آرگومان اجباري نياز داره ( به ترتيب: نوع سرور(معمولا Localhost) ، نام كاربري، كلمه ي عبور). در پايين مثالي رو مشاهده مي كنيد كه توسط كاربر root و بدون استفاده از كلمه ي عبور به بانك اطلاعاتي متصل شديم:


PHP Code:1 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table2,%20div2%29;)<?

mysql_connect("localhost","root","") or print ("Couldnt Connect to MySQL"

);

?> همانطور كه در بالا مشاهده مي كنيد درصورتي كه برنامه ي ما نتواند به بانك اطلاعاتي متصل شود پيغام خطاي مشخصي را بازمي گرداند.

خوب بعد از اتصال بايد ديتابيسي رو كه از قبل درست شده رو به برناممون معرفي كنيم. براي اينكار هم يك تابع با ساختار بسيار ساده وجود دارد به نام mysql_select_db كه يك آرگومان اجباري و يك آرگومان اختياري رو براي انجام كارش ميخواد.اولين آرگومان نام ديتابيس شما هست و دومين آرگومان كه اختياري هست نام متغيري است كه با اون به MySQL متصل شديم.(در كد زير كاملا مشخص مي شود)



PHP Code:2 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table3,%20div3%29;)<?


$link=mysql_connect("localhost","root","") or print ("Couldnt Connect to MySQL"

);


mysql_select_db("test_data",$link

);

?> در كد بالا سعي شده كه بعد از اتصال به بانك اطلاعاتي ديتابيسي با نام "test_data" رو به برناممون معرفي كنيم.
خوب حالا مي خوام دوتا تابع ارزشمند MySQL رو بهتون معرفي كنم با نام هاي mysql_error و mysql_erno. اين دوتا تابع پيغام هاي خطاي دريافت شده توسط Mysql رو درخود ذخيره ميكنند و در جاي مشخص شده برروي صفحه ي مرورگر به نمايش در مي آورند (اولي متن پيام خطا و دومي شماره ي خطا) حالا كافي است به جاي پيغام خطاي خودمون از اين توابع استفاده نماييم:


PHP Code:3 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table4,%20div4%29;)

<?

mysql_connect("localhost","root","1231") or print (mysql_error

());

mysql_select_db("test_data"

);

?>

در كد بالا سعي شده تا با شناسه "root" و رمز عبور "1231" به بانك اطلاعاتي وصل بشيم و بعلت اشتباه بودن پيام خطاي زير را دريافت مي كنيم:
Couldnt open test_data: access denied for user : root@localhost using password (yes) to database 'test_data'


براي قطع اتصال از بانك هاي اطلاعاتي MySQL نيز مي توان از تابع mysql_close استفاده كرد:

PHP Code:4 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table5,%20div5%29;)

<?

$link=mysql_connect("localhost","root","1231") or print (mysql_error

());

mysql_close($link

);

?>




تا يادم نرفته،: فرق بين mysql_connect و mysql_pconnect اينه كه mysql_pconnect فقط مخصوص سرورهاي Apache هست و تنها فرقشون هم اينه كه براي mysql_pconnect تفاوتي نداره كه شما از تابع mysql_close استفاده بكنيد يا نه، زيرا تا آخر اسكريپت شما اين اتصال پا برجا باقي خواهد ماند!.

ساخت جدول


خوب حالا ديگه كم كم داريم به جاهاي خوبش ميرسيم!:براي انجام هرنوع پرس جو در بانك هاي اطلاعاتي MySQL بايد از تابعي با عنوان mysql_query استفاده كنيم (query به معناي پرس جو). با استفاده از اين تابع ابتدا جدولي رو درديتابيس test_data بوجود مياريم:

PHP Code:5 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table6,%20div6%29;)<?

mysql_connect("localhost","root","") or die (mysql_error());

mysql_select_db("test_data"

);

mysql_query(

"CREATE TABLE mytable (

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

jender VARCHAR(20) NOT NULL,

PRIMARY KEY (id))"

) or die (mysql_error

());



?>

خوب حالا فكر نكنين همينجوري اين كد رو با شما به امان خدا رها ميكنم .خوب در خط چهارم تابع مورد بحث شروع ميشه كه در خط اولش فرمان "CREATE TABLE $table_name" رو صادر كرديم،
در خط دومش يك جدولي با نام id با ساختاري ساده ساختيم. در ادامه ي اين خط گفتيم كه نوع داده هاي اين جدول از نوع INT يعني عدد صحيح مي باشد و خالي از مقدار نيز نباشد (NOT NULL) و مقدار آن نيز بطور خودكار افزايش پيدا كند (AUTO_INCEREMENT) اين جدول يكي از مهمترين جدولهاست كه بايد در تمام دتابيس هام.ن اونو داشته باشيم (از تكرار و ايجاد پيغام خطا بعلت تكراري بودن جلوگيري ميكند، درپرس جوها كار را راحت تر ميكند البته براي مورد اول كه گفته شد در ادامه توضيح خواهيم داد).
در خط سومش جدولي با نام "name" ايجاد كرديم. در ادامه گفتيم كه نوع داده به اين جدول يك نوشته ي معمولي كوتاه با حداكثر تعداد كاركتر 50 تايي مي باشد و طبق معمول خالي از مقدار.
خط چهارم هم دقيقا مثل خط سوم عمل كرديم.
و اما در خط پنجمش جدول اصلي رو مشخص كرديم كه اين كار نيز الزامي است و به طور معمول و بهتر اون رو "id" قرار مي ديم. با اين كارمون باعث مي شيم كه هيچ وفت بعلت شباهت اسم ها و يا هرنوع داده ي جدول باهم قاتي نشن و پيام خطايي دريافت نكنيم. به همين راحتي!!!

افزودن داده ها به جداول


براي افزودن داده ها به جداولمون بايد يك پرس جوي SQL ديگه بازهم با استفاده از mysql_query ترتيب بديم. اين پرس جو ساختار ساده اي داره كه ترجيح ميدم اول كدشو بنويسم بعد از روي كد توضيح بدم:

PHP Code:6 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table7,%20div7%29;) <?
// here connect to MySQL and select your db
mysql_query("INSERT INTO mytable (name, jender) values ('Pezhman', 'man')")
or die (mysql_error());
?>



خوب هونطور كه ديدين اين پرس جومون از يك جمله بندي ساده و اما با ساختاري ثابت تشكيل شده. در خط دوم با تابع mysql_query پرسو جويي رو ترتيب داديم كه در ابتداي اين پرس و جو از فرمان "INSERT INTO $table_name" استفاده كرديم. در ادامه در داخل پرانتز نام جداولي كه بايد پر شوند رو درج ميكنيم (جدول id خودبخود پر خواهد شد) و بعد با فرمان values يعني مقادير متغيرامون رو به جداول وارد مي كنيم (بايد به ترتيب باشند). به همين راحتي!!!

بازيابي داده ها از جداول
خوب حالا ديگه وقتشه كه نتيجه ي كارتون رو بگيرين. اول از همه يك تابع رو معرفي مي كنم كه دقيقا بعد از افزودن داده ها به جداول مورد استفاده قرار مي گيره و اون هم mysql_insert_id است و هيچ آرگومان ورودي هم نداره و فقط كافي است كه در همون زماني كه داده ها به جداول وارد ميشن دقيقا بعد از اون اين تابع رو بكار بگيرين تا "id" جديدي رو كه مربوط به اطلاعات جديد هستند رو بدست بيارين. اين تابع مي تونه مفيد باشه. (چون حجم مطالب زياده از نوشتن كد اين يكي صرف نظر ميكنيم... اما اگه نفهميدين بگين تا بگم!)


خوب حالا يك پرس جوي ديگه بايد تشكيل بديم تا داده هامون رو بدست بياريم. (اول كد بعد توضيحات:)

PHP Code:7 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table8,%20div8%29;) <?
// here connect to MySQL and select your db
$re=mysql_query("SELECT *FROM mytable") or die (mysql_error());
?>





خوب همونطور كه مي بينيد اين هم ساختار ساده اي داره:
با فرمان "SELECT *FROM $tablename" داده ها را در متغير "$re" ذخيره مي كنيم (* بمعناي انتخاب همه است). البته مسعله همينجوري الكي پلكي هم نيست و در قسمت دوم در مورد چگونگي مرتب سازي و يا انتخاب يك مورد خاص در جداول و ... بحث مي كنيم ولي مسعله ي مشكل ساز فعلا اينه كه داده هاي ذخيره شده در متغير "$re" به همين سادگي برروي صفحه مرورگر نمايش داده نمي شن و خوبي كار هم همينه!.


براي اين منظور سه راه وجود داره كه من بهترين و ساده ترينشو بهتون ميگم كه اون هم تابع mysql_fetch_array هست كه داده هاي ما رو به يك آرايه تبديل مي كنه و يك آرگومان ورودي مي خواد كه همون متغير "$re" ماست. در زير چگونگي انجام اين كارو ببينيد تا توضيحش رو هم بدم:

PHP Code:8 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table9,%20div9%29;) <?
// here connect to MySQL and select your db
$re=mysql_query("SELECT *FROM mytable") or die (mysql_error());
while ($array=mysql_fetch_array($re)){
print $re['id'].". ".$re[name']." : ".$re['jender']."<br>";
}
?>





خوب همونطور كه مي بينيد داده هاي ما بصورت يك آرايه درآمده اند كه نام هاي هر كدومشون رو اسم جداولمون تشكيل ميدن.
خوب حالا شا يد باخودتون بپرسين كه چرا ما اين كارو در يك ساختار تاكرار while انجام داديم؟. با مثال زير موضوع كاملا روشن ميشه:
فرض كنيد در جدولمون، ما نام چند نفر رو ثبت كرديم. آيا بدست آوردن تمام اين نام ها در يك آرايه كه فقط مي تونه مشخصات يك نفر رو نگه داره امكان پذيره؟
براي اين كار ساختار while مي تونه كمكمون كنه و تا زماني كه در جدولمون داده اي وجود داشته باشه اين ساختار داده ها رو در متغير $array به صورت يك آرايه ذخيره مي كنه و درصورت صدور فرمان اونها رو برروي مرورگر به نمايش در مي آره. اگه در جدول ما به طور مثال اسم دونفر با نام هاي Pezhman و Hamed ثبت شده باشه خروجي حاصل از برناممون به اين شكل درمياد:
1. Pezhman: man
2. Hamed: man

تعيير داده ها


تغيير داده ها نيز در جداول با يك پرس و جوي ساده انجام مي گيرد. (اول كد و بعد توضيحات):

PHP Code:9 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table10,%20div10%29;) <?
//here connect to MySQL and select your db
mysql_query("UPDATE mytable SET name='Pezhman32', WHERE name='Pezhman'")
or die (mysql_error());
?>




همونطور كه در بالا مشاهده كرديد آغاز كار با فرمان "UPDATE $table_name SET" بوده است و بعد نام ستون و سپس متغير مورد نظر (cols='$values'). بخاطر داشته باشد كه هميشه امكان وجود فضاي خالي در متغير ها هست، پس آنها را بين علامت هاي ' قرار دهيد.
در پايان نيز مشخص كرديم كه در كجا بايد تغييرات صورت بگيره. (هيمشه در اين قسمت شماره id را در نظر بگيريد زيرا اگر دونفر با نام هاي "Pezhman" در جدول مورد نظر وجود داشته باشند دستخوش تغيير خواهند شد مگر آنكه قصد شما از انجام اين كار، اين باشد كه تمامي افرادي كه نامشان "pezhman" است را در جدول خود دست خوش تغيير قرار دهيد).

حذف داده ها


يكي از دوست داشتني ترين كار ها، حذف داده ها از جدولمونه!!!!!. اين كار هم براحتي انتخاب كردن و... است. براي حذف داده ها از جداول بايد از فرمان "DELETE FROM" استفاده كرد. به مثال زير توجه كنيد:

PHP Code:10 [hide] (http://javascript%3Cb%3E%3C/b%3E:hide_shows%28table11,%20div11%29;) <?
// here connect to MySQL and select your db
mysql_query("DELETE FROM my_table WHERE name='Pezhman'")
or die (mysql_error());
?>



در مثال بالا، پرس جوي ما تمامي كساني را كه نام آنها دقيقا برابر با "Pezhman" باشد را از جدولمون حذف خواهد كد.
البته يادتون باشه كه از "id" استفاده كنيد چون ممكنه بيشتر از 1 نفر در جدول شما با اسم "Pezhman" ثبت شده باشند... مگر اينكه از اينكارتون حدف خاصي داشته باشيد.