PHP برای برنامه نویسان ASP.NET – قسمت هفتم


قسمت اول قسمت دومقسمت سومقسمت چهارمقسمت پنجمقسمت ششم

در این قسمت با نحوه کار با دیتابیس در PHP آشنا خواهید شد. همانطور که پرکاربردترین RDBMS در نزد برنامه نویسان ASP.NET برنامه SQL Server مایکروسافت است، MySQL پرکاربردترین RDBMS در میان برنامه نویسان PHP است. در این سری آموزش ها ما نیز بر روی دسترسی به داده ها در MySQL تمرکز خواهیم داشت.

اتصال یه یک دیتابیس MySQL

قبل از هر کاری ابتدا شما باید یک ارتباط میان برنامه خود و MySQL ایجاد کنید. برای این کار PHP یک تابع به نام my_sql_connect دارد که نام سرور، نام کاربری و رمز عبور دیتابیس MySQL را از شما می گیرد و یک اتصال برای شما ایجاد می کند. اگر این تابع با موفقیت به دیتابیس مورد نظر شما وصل شود true و ر غیر این صورت false برمی گرداند. برخلاف اتصال به SQL Server در ASP.NET که با استفاده از کلاس های دات نت انجام می گیرد، اینجا در PHP با استفاده از این تابع و توابع دیگر می توان با یک دیتابیس MySQL کار کرد. به مثال زیر توجه کنید :

<?php
$link = mysql_connect(‹localhost›, ‹user›, ‹password›);
if (!$link) {
die(‹Could not connect: ‹ . mysql_error());
}
echo ‹Connected successfully›;
mysql_close($link);
?>

تابع mysql_connect در این مثال با استفاده از نام کاربری user و رمز عبور password به سرور localhost وصل می شود و نتیجه این اتصال را در متغیر link می ریزد. اگر این عمل موفیت آمیز باشد عبارت Connected successfully چاپ می شود، در غیر این صورت پیغام خطای خود MySQL را نمایش می دهد و به اجرای این اسکریپت خاتمه می دهد. در انتها نیز اگر اسکریپت با موفیت به MySQL وصل شده باشد، با تابع mysql_close اتصال را می بندیم. تابع die مانند تابع exit (در قسمت قبلی) یک پیغام را نمایش می دهد و اجرای ادامه اسکریپت را متوقف می کند.

البته تابع mysql_connect پارامترهای دیگری نیز دارد که ما به آن ها نمی پردازیم. همچنین شما می توانید این تابع را بدون ذکر هیچ پارامتری صدا بزنید که در این صورت از مقادیر ثابت پیش فرض موجود در فایل php.ini استفاده خواهد شد.

ایجاد یک دیتابیس بر روی MySQL

شما قبل از اینکه بخواهید از یک دیتابیس در برنامه خود استفاده کنید، ابتدا باید آن را ایجاد کنید. برای این کار می توانید از ابزارهایی مثل PhpMyAdmin استفاده کنید یا خودتان با استفاده از کدنویسی PHP دیتابیس MySQL خود را بسازید. در اینجا روش دوم که روش مناسب تری نیز هست را با یک مثال توضیح می دهم. لطفاً به مثال زیر توجه کنید :

<?php
$sql_create_db = ‹CREATE DATABSE test›;
$sql_create_table = ‹CREATE TABLE table1 (tbl_id INT PRIMBARY KEY, fname VARCHAR(100), lname VARCHAR(100))›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
//Create Database
if(mysql_query($sql_create_db, $link))
echo «Database created.»;
else
die(«Error : « . mysql_error());
//Select Active Database
mysql_select_db(«test», $link);
//Create table
if(mysql_query($sql_create_table, $link))
echo «Table created.»;
else
die(«Error :» . mysql_error());
//Close Connection
mysql_close($link);
}
else
die(«Error connect to database : « . mysql_error());
?>

امیدوارم با دستورات SQL آشنایی کافی داشته باشید. در این مثال نتیجه اتصال به سرور MySQL را در متغیر link ریختیم، سپس با یک if چک می کنیم که آیا اتصال ما با موفقیت انجام پذیرفته یا خیر. اگر موفق بوده سعی می کنیم Database و Table مورد نظر خود را بر روی این اتصال بسازیم. برای این کار از تابع mysql_query استفاده می کنیم. این تابع یک دستور sql را بر روی MySQL اجرا می کند. اگر موفق به ایجاد دیتابیس بر روی سرور شدیم، با استفاده از تابع mysql_select_db دیتابیس جاری MySQL را به دیتابیس test تغییر می دهیم. بعد دوباره با استفاده از تابع mysql_query اسکریپت ایجاد table بر روی دیتابیس فعال را اجرا می کنیم که اگر موفقیت آمیز بود پیغام مناسب را نمایش می دهیم.

تابع mysql_query یکی از توابع بسیار پرکابرد برای دسترسی و تغییر داده ها در MySQL است. اگر یک اسکریپت فقط اجرایی و بدون مقدار برگشتی (مثل دستور Insert یا همین ایجاد دیتابیس) را به این تابع بدهید، مقادیر True یا False رابر خواهد گرداند، اگر دستور SQL شما نتیجه ای داشته باشد (مثل دستور Select) مقدار برگشتی این تابع اگر موفقیت آمیز باشد یک resource خواهد بود و در غیر این صورت False خواهد بود.

درج، به روز رسانی و حذف داده ها در MySQL

برای اجرای دستورات Insert, Update و Delete بر روی یک دیتابیس MySQL در PHP همانطور که در مثال بالا مشاهده کردید از تابع mysql_query استفاده می کنیم. نکته ای که برنامه نویسان ASP.NET باید به آن توجه داشته باشند این است که در PHP شما باید خودتان عمل دریافت اطلاعات از کاربر (با استفاده از فرم های HTML) و اعتبارسنجی داده های ورودی کاربر را انجام دهید تا از حملات SQL Injection در امان بمانید. در ASP.NET با استفاده از کلاس SqlParameter می توان تا حد زیادی از وقوع این حملات جلوگیری کرد. من یک مثال کوچک در مورد نحوه Insert یک رکورد به دیتابیسی که در مثال بالا ساختیم می زنم، Update و Delete را خودتان بنویسید.

<?php
$sql_insert = ‹INSERT INTO table1 (tbl_id, fname, lname) VALUES (1,»iman»,»nemati»)›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
mysql_select_db(«test», $link);
if(mysql_query($sql_insert, $link)
echo «Inserted to database»;
mysql_close($link);
}
else
die(«Error: « . mysql_error());
else
die(«Error: « . mysql_error());
?>

البته در سناریوهای واقعی شما باید مقادیر فیلدها را از ورودی های کاربر بخوانید و در دستور sql بالا جایگذاری کنید.

خواندن اطلاعات از یک دیتابیس MySQL

منظور همان دستور Select در sql و خواندن تعداد رکوردهای مورد نظرمان بر اساس شرطی خاص است. برای این کار پس از اتصال به دیتابیس مورد نظر خود دستور Select مورد نظرتان را بوسیله تابع mysql_query اجرا می کنید و سپس نتیجه را در یک متغیر قرار می دهید. اگر متغیر برابر false نبود، با استفاده از تابع mysql_fetch_assoc شروع به خواندن رکوردهای مورد نظر خود می کنیم. به کد زیر نگاه کنید :

<?php
$sql_select = ‹SELECT * FROM test›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
mysql_select_db(«test», $link);
$results = mysql_query($sql_select, $link);
if(!$results){
echo «Error : « . mysql_error();
exit;
}
if(mysql_num_rows($results) == 0){
echo «no record found.»;
exit;
}
while($item = mysql_fetch_assoc($results)){
echo $item[‹tbl_id›];
echo $item[‹fname›];
echo $item[‹lname›];
echo ‹<br />›;
}
mysql_free_result($results);
?>

تابع mysql_num_rows تعداد رکوردهایی که توسط دستور select خوانده شده اند را برمی گرداند. در دستور شرط while با استفاده از تابع mysql_fetch_assoc تعیین می کنیم که تا وقتی یک رکورد وجود دارد دستورات بدنه while اجرا شوند. اگر انتظار برگرداندن فقط یک رکورد را دارید نیازی به استفاده از حلقه while نخواهید داشت. تابع mysql_free_result هم سعی می کند حافظه اختصاص داده شده به متغیری که با اطلاعات یک دیتابیس پر شده را آزاد کند.

farasun.wordpress.com

ادامه دارد…

Advertisements