رابط 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 : برای دریافت تمامی رکوردها استفاده می شود. در این متد نیازی به استفاده از حلقه به ازای هر بار اجرا نیست.
دیدگاهتان را بنویسید