بابهت: [PHP] دەستەبەرداری ڕێگە کۆنەکەی پەیوەندیکردن بە!
سڵاو هاوڕێیان،
ماوەیەکی درێژبوو لە وێبچن چالاکیم نەمابوو. ڕاستییەکەی گەلێک سەرقاڵی ژیان و خوێندن و کارکردن بووم. هیوام وایە هەموو لایەک لەش ساغ و سەلامەت بن.
پێم خۆش بوو لەو دەرفەتە کەمەی کە بۆم هەڵکەوت، ئەم بابەتەتان پێشکەش بکەم.
لەمانگی ١٢ ساڵی پارەوە، خۆشبەختانە PHP 7.0 کەوتۆتە بەردەست بە کۆمەڵێک گۆڕانکاری و تایبەتمەندی نوێوە. پێم وایە PHP 7 توانایەکی دیکە بەوێب دەدات و هەلێکی باشتر بۆ بەرهەمی بەهێزتر دەستەبەر دەکات.
لەنێو ئەو گۆڕانکارییانەی کە PHP 7 ئەنجامی داوە، وازلێهێنان و دوورخستنەوەی یەکێکە لە function ـە هەرە باوەکانی پەیوەندی بەستن بە بنکەی دراوەوە کە mysql_connect() ـە. پێم وایە بۆ هەندێک لە پرۆگرامەرەکان پەیامێکی زۆر دڵخۆشکەر نەبووبێت. بەدڵنیاییەوە. هەمیشە خووەکۆنەکان تەرککردنی گرانە.
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_connect()
PDO::__construct()
ئەگەر چی لە PHP 5.5.0 ـەوە کەوتۆتە بەر deprecation (هانی بەکارنەهێنانی دراوە)، بەڵام لە PHP 7 دا بە تەواوی لەکارخراوە.
بۆ ئەوانەی کە دەمێکی بوو کاریان لەگەڵ ئەم درێژکراوەیەی PHP دا دەکرد، ئەمە تەنها پەیامێکی ناخۆش نییە، بەڵکو ئاگادارییەکی بەهێزیشە کە پێویست دەکات نەک هەر بۆ لەمەودوا ڕێگە و شێوازە نوێیەکانی پەیوەندی بەستن بە بنکەی دراوەوە بگیرێتە بەر، بەڵکو پڕۆژە کۆنەکانیش پێویستە نوێ بکرێنەوە بۆ نوێترین ئامرازەکان. هۆکارەکەی بەسادەیی ئەوەیە کە، ئەگەرچی لەئێستادا زۆربەری ڕاژەکارەکان ناوێرن PHP نوێ بکەنەوە بۆ PHP 7 بەهۆی ئەوەی کە زۆرێک لە پڕۆژەکان mysql_connect() بەکاردەهێنێت و ئەوەش دەبێتە هۆی لەکارکەوتنی ئاپڵیکەشنەکان، بەڵام لەداهاتوویەکی نزیک بۆ مامناوەنددا هەر نوێی دەکەنەوە. تەنها مەسەلەی کات و داواکارییە و هیچی تر. تا وەکوو پڕۆژە نوێیەکان تایبەتمەندی زیاتری PHP 7 بەکاربەرن، چانسی نوێکردنەوەی ئەو ڕأژەکارانە بۆ PHP 7 زۆرتر دەبێت.
لەئێستادا ئەگەر هێشتا پڕۆژەکانت لەکار نەکەوتووە، زۆر باشە. بەڵام هەر وا نامێنێتەوە.
لەبەرئەوە، پێویستە وەکوو بەڕێوەبەری پڕۆژە/پرۆگرامەر/وێبماستەر/بەڕێوەبەری تەکنیکی، مشووری ئەم بابەتە بخۆیت. خۆشبەختانەش ڕێگەکە نەک هەر ئاسانە، بەڵکو تایبەتمەندی زیاتریش دەداتە سیستمەکەت.
لەبری ئەم درێژکراوە کۆن و بەسەرچووە، PHP خاوەنی ٢ درێژکراوەی بەهێز و چالاکە کە دەتوانن ببنە جێگرەوەیەکی زۆر باش:
١. mysqli_connect()
٢. PDO
بەکورتی باس لەهەردووکیان دەکەم و بەهیوای ئەوەم بە زووترین کات شێوازی پەیوەندی بەستنەکانتان بگۆڕن.
بۆ مەبەستی تاقیکردنەوە، وای دادەنێین ئەم زانیارییانەی لای خوارەوە، ئەو زانیارییانەن کە من هەمن بۆ پەیوەندیکردن بە بنکەدراوەی MySQL ـەوە:
ناوی ڕاژە: localhost
ناوی بەکارهێنەر: broosk
وشەی تێپەڕبوون: webchin1234
ناوی بنکەی دراوە: foo
mysqli_connect():
بۆ درووستکردنی پەیوەندییەکە:
// درووستکردنی پەیوەنجییەکە
$connection = mysqli_connect("localhost", "broosk", "webchin1234", "foo");
// بپشکنە، بزانە پەیوەندییەکە بەستراوە؟
if (!$connection) {
die("نەتوانرا پەیوەندی ببەسترێت: " . mysqli_connect_error());
}
echo "پەیوەندی بەستن سەرکەوتوو بوو";
بۆ داخستنی پەیوەندییەکە:
mysqli_close($connection);
بۆ پێدانی query بە بنکەی دراوە:
// درووستکردنی پەیوەنجییەکە
$connection = mysqli_connect("localhost", "broosk", "webchin1234", "foo");
// بپشکنە، بزانە پەیوەندییەکە بەستراوە؟
if (!$connection) {
die("نەتوانرا پەیوەندی ببەسترێت: " . mysqli_connect_error());
}
echo "پەیوەندی بەستن سەرکەوتوو بوو";
$sql = "SELECT * FROM users";
$query = mysqli_query($connection, $sql);
while($results = mysqli_fetch_array($query)){
}
mysqli_close($connection);
ئەوەی سەرەوە Procedural ـە و بۆخۆم حەزی پێ ناکەم. هۆکاری ئەوەی کە داشمناوە ئەوەیە ئەزانم زۆرێک لە بەکارهێنەرانی وێبچن هێشتا، بەداخەوە، بە procedural کار دەکەن. بەهەرحاڵ، ئەگەر زانیاری زیاترت دەوێت لەسەر mysqli_connect OOP سەیرێکی ئێرە بکە. بەستەرەکەی خوارەوە بەس لە prepared statements دەکات بەشێوەیەکی سەرەکی، بەڵام نموونەی زۆر باشی تێدایە بۆ تێگەیشتن لەکۆی بەکارهێنانی ئامرازەکە وەک OOP:
http://php.net/manual/en/mysqli.prepare.php
PDO:
من بۆخۆم PDO بەکاردێنم و ئامرازێکی گەلێک تایبەتە. ئەگەرچی بۆ پڕۆژەی بچووک هێشتا MySQLi سەرکەوتووترە، بەڵام PDO بەستراوە نییە بەتەنها یەکجۆر بنکەی دراوەی وەک MySQL. دەتوانیت لەگەڵ PDO بەچەندین جۆری جیاواز بنکەی دراوەوە پەیوەندی ببەستیت، بەبەکارهێنانی هەمان method ـەکانییەوە. PDO کڵاسە، واتا بەکارهێنانی ئامرازەکانی بەشێوەی درووستکردنی object دەبێت، ئەگەرچی MySQLi ـش وەشانی OOP هەیە وەک لەسەرەوە ئاماژەم پێداوە.
بۆ پەیوەندی بەستن:
// درووستکردنی پەیوەنجییەکە
try {
$connection = new PDO("mysql:host=localhost;dbname=foo", 'broosk', 'webchin1234');
//لێرە وادەکەیت کە مۆدی پیشاندنی هەڵە بکرێتە بە شێوازی ئێکسێپشن. هەر بۆیە try و catch بەکاردەبەین
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "پەیوەندیکردنی سەرکەوتوو بوو";
}
catch(PDOException $e){
echo "نەتوانرا پەیوەندی ببەسترێت: " . $e->getMessage();
}
نموونەیەکی سادەش بەبەکارهێنانی prepared statements:
// درووستکردنی پەیوەندییەکە
try {
$connection = new PDO("mysql:host=localhost;dbname=foo", 'broosk', 'webchin1234');
//لێرە وادەکەیت کە مۆدی پیشاندنی هەڵە بکرێتە بە شێوازی ئێکسێپشن. هەر بۆیە try و catch بەکاردەبەین
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $connection->prepare("SELECT * FROM users WHERE username = ?");
$query->bindValue(1, 'broosk');
$query->execute();
$results = $query->fetchAll(PDO::FETCH_OBJ);
echo $results[0]->username;
}
catch(PDOException $e){
echo "نەتوانرا پەیوەندی ببەسترێت: " . $e->getMessage();
}
بەهیوای سەرکەوتن.