توابع و پرس جوهای MySQL در یک نگاه - وبسایت دکتر امیر مرتضی سعیدی

توابع و پرس جوهای MySQL در یک نگاه

یکشنبه 91/7/16
12:51 عصر
amirsaeedi

در این مقاله سعی شده تا نگاهی به توابع و پرس و جوهای ابتدایی 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]<?


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

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

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

PHP Code:2 [hide]<?


$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]
<?


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]
<?


$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]<?
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] <?
// 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] <?
// 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] <?
// 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] <?
//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] <?
// 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" ثبت شده باشند... مگر اینکه از اینکارتون حدف خاصی داشته باشید.




منبع : http://forum.irdesigners.com



طراح صفحات وب - برنامه نویس تحت سی پلاس پلاس و دلفی و ویبی - طراح نرم افزار های تبلیغاتی - تدریس خصوصی - ارائه پروپوزال و پایان نامه - ارائه مقالات علمی (برای ارتباط نظر بگذارین)
تمامی حقوق این وب سایت متعلق به وبسایت دکتر امیر مرتضی سعیدی است. || طراح قالب avazak.ir