تعداد بازدید: 1388

رابط mysqli و PDO

عموما DBMS ها یک رابط Command line برای دستکاری پایگاه داده در اختیار کاربر قرار می دهند. همانند تمامی پروتکل های کامپیوتری MySQL نیز سرویس هایی برای استفاده در اختیار سرویس های خارجی ( مثلا زبان php ) قرار می دهد.

رابط های PHP امکان ارسال درخواست به پایگاه داده را از طریق MySQL فراهم می کند. زبان برنامه نویسی PHP نیز سه رابط برای استفاده از MySQL دارد :

  • mysql : ورژن قبل از 5.5
  • mysqli : رابط شئ گرا
  • PDO : رابط منعطف

برای استفاده از پایگاه داده با استفاده از DBMS در زبان php همانند رابط های دستوری باید ابتدا به پایگاه داده (از طریق DBMS) متصل شد.سپس درخواست (Query) را اجرا کرد و در پایان اتصال را بست. اتصال در پایان اجرای برنامه بسته می شود و تنها در اجرای برنامه های خاص باید اتصال را بست.

MySQL Improved (MySQLi)

برای دسترسی به پایگاه داده از طریق رابط mysqli ابتدا باید اتصال برقرار کنیم. همانند سایر پروتکل ها برای اتصال نیاز به host , port , username , password داریم.

$connection = mysqli_connect(HOST , USER , PASSWORD , DATABASE , PORT);

mysqli::query : با استفاده از متد های شئ $connection در بالا می توانیم درخواست به پایگاه داده بفرستیم. متد query برای اجرای Query در پایگاه داده می باشد.

$query = "SELECT * FROM wp_posts LIMIT 5";
$result = $mysqli->query($query);

خروجی این متد یک شئ از جنس کلاس mysqli_result می باشد که با استفاده از متدهای آن می توان رکوردهای حاصل از Query را برگرداند.

mysqli_result::fetch_assoc : این متد به ازای هر بار اجرا یک ردیف در قالب آرایه انجمنی بر می گرداند. با قرار دادن آن در حلقه while می توان به تمامی موارد دسترسی داشت.

$result = $mysqli->query($query);
while($row = $result->fetch_assoc()){
    echo $row['ID'] . "<hr>";
}

mysqli_result::$num_row : تعداد ردیف های بازگشتی از پایگاه داده را برمی گرداند.

$result = $mysqli->query("SELECT Code, Name FROM Country ORDER BY Name");
$row_cnt = $result->num_rows;
$result->close();

mysqli::prepare : با استفاده از این متد می توانید از کاربر پارامتر دریافت کنید بصورت کاملا امن پارامتر را در Query های خود اضافه کنید.خروجی این متد یک شئ از کلاس mysqli_stmt می باشد که متدهایی جهت دریافت و اجرای Query دارد.

$query = "INSERT INTO wp_admin(fname , lname , last_login) VALUES( ? , ? , ?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sss", $fname, $lname, $last_login);
$stmt->execute();

mysqli_stmt::bind_param : نگاشت کردن متغیر های ورودی کاربر به پارامتر های Query با توجه به جنس آن ها . s به معنی string است ، سایر نوع داده ها به شکل زیر است :

Character Description
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets

mysqli_stmt::fetch : برای دریافت رکوردها در Query هایی از جنس Read می باشد. معادل mysqli_result::fetch_assoc می باشد.

$stmt = $connection->prepare("SELECT * FROM wp_posts");
$res = $stmt->execute();
if(!$res){
    return;
}
while($post = $stmt->fetch()){
    echo $post['title'];
}

نکته : متد های این شئ همه در رابطه با دریافت اطلاعات حاصل از اجرای Query می باشد. سایر متد های مهم این شئ از کلاس mysqli_result را می توانید در سورس آن مشاهده کنید. این شئ حاصل از اجرای متد mysqli::query می باشد.

PHP Data Objects – PDO class

یک رابط MySQL در قالب یک کلاس PDO با امکانات مشابه mysqli با این قابلیت که می توان driver پایگاه داده را در آن تعیین کرد. البته باید دقت داشته باشید که این افزونه آن باید روی php نصب و فعال سازی شده باشد ( pdo_dirver در php.ini).

برای برقراری ارتباط از طریق PDO به پایگاه داده باید به صورت زیر عمل کنیم :

$dbh = new PDO("mysql:host=localhost;dbname=wpdb;" , USERNAME , PASSWORD);

PDO::query : بوسیله این کلاس می توان یک Query را روی پایگاه داده اجرا کرد. با قرار دادن این متد در یک حلقه می توان اطلاعات مربوط به رکورد را دریافت کرد.

$query = "SELECT ID,title FROM wp_posts";
while($row = $dbh->query($query)){
     echo $row['title'];
}

فرمت خروجی رکورد این متد را می توان با استفاده از پارامتر ورودی آن تغییر داد ( شئ ، آرایه انجمنی ، … )

PDO::lastInsertId : شناسه آخرین رکورد وارد شده را بر می گرداند. پس از اجرای کامل Query با استفاده از شئ PDO یا همان متغیر $dbh->lastInsertId را می توان گرفت.


PDO::prepare : این متد نیز عملکردی معادل mysqli::prepare دارد با این تفاوت که خروجی یک شئ از کلاس PDOStatement می دهد که متدهایی مشابه کلاس mysqli_stmt دارد.

PDOStatement::bindParam : این متد که مربوط به شئ است که از خروجی PDO::prepare برگرفته شده است می باشد برای نگاشت کردن متغیر های ورودی کاربر به پارامتر های ورودی Query می باشد. این متد معادل mysqli_stmt::bind_param می باشد.

پارامتر اول نام ورودی Query با فرمت خاص می باشد. پارامتر دوم ورودی کاربر و پارامتر سوم ثابتی است که تعیین کننده نوع ورودی می باشد. این ثوابت را می توانید از سورس PDO مشاهده کنید.

PDOStatement::execute : این متد prepared statement که در مراحل قبل ساخته بودیم را اجرا می کند. خروجی این متد نتیجه اجرا می باشد.

$query = "INSERT INTO wp_posts(title,content) VALUES(:title , :content);
$stmt = $query->prepare($query);
$stmt->bindParam(:title,$title,PDO::PARAM_STR);
$stmt->bindParam(:content,$content,PDO::PARAM_STR);
$res = $stmt->execute();

PDOStatement::fetch : برای دریافت اطلاعات حاصل از Query اجرا شده. مثال زیر استفاده از PDO::prepare برای دریافت داده ها می باشد:

$stmt = $dbh->prepare("SELECT ID, title FROM wpdb");
$res = $stmt->execute();
if (!$rs) {
        return;
}
while($row = $stmt->fetch()){
        echo $row['title'];
}

PDOStatement::fetchAll : برای دریافت تمامی رکوردها استفاده می شود. در این متد نیازی به استفاده از حلقه به ازای هر بار اجرا نیست.

مطالب مشابه

php command line feature

امکانات command line در php

php یک زبان برای embed (جاسازی) به فرمت HTML می باشد. در عین حال command line interface نیز دارد و می توان مثل تمامی...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

پایگاه داده وردپرس

در این مقاله قصد داریم تا پایگاه داده وردپرس ۴.۴ رو بررسی کنیم. پایگاه داده این نسخه از وردپرس تا mysql نسخه 5.0.15 و...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

معرفی تابع get_posts در وردپرس

در این مقاله میخوایم که تابع get_post و get_posts رو معرفی کنیم . این تابع کار کوئری هایی که با شی WP_Query می گرفتیم ....

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای رابط mysqli و PDO

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *