گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

اتصال و استفاده از پایگاه داده MSSQL در PHP

نویسنده:
25 آوریل 14

به نظرم خیلی اشتباهه که وقتی با PHP کار میکنیم کلاً از ویندوز و IIS استفاده کنیم که حالا اصلاً بحث استفاده از MSSQL هم مطرح بشه. ولی نمیشه زیاد گلایه کرد و خیلی‌ها هم هستند که با سرویس دهنده های ویندوزی به خاطر آشنایی بیشتر ، راحت‌تر هستند و ترجیح هم میدهند از MSSQL استفاده کنند. ولی قبل از خوندن این مطلب به شدت توصیه میکنم که تجدید نظر کنند و از MySQL یا Maria DB یا Postgre SQL استفاده کنند.

به طور کلی چندین روش برای اتصال به MSSQL وجود داره که من ۵ روش معمول را میگم و یکی را که توصیه میکنم توضیحات و کدش را میگذارم.

روش اول : تا نسخه ۵٫۳ خود php یک Extension به نام mssql داشت که هنوز مستنداتش هم توی سایت php.net موجوده ولی دیگه پشتیبانی نمیشه ، حالا اگه خیلی علاقه دارین میتونید از نسخه های قدیمی تر php استفاده کنید و از این extension استفاده کنید. البته قرار نیست مثلا همه امکانات SQL 2012 را هم پشتیبانی کنه و ممکنه خیلی bug داشته باشه. مستنداتش هم اینجاست.

روش دوم : مایکروسافت مثل اینکه خودش متوجه شده اگه دست به کار نشه توی php واقعا کسی با مشکلات driver های فعلی سراغ mssql نمیره و خلاصه آستین ها را بالا زدند یا سفارشش را دادند. خودش اومده یک extension برای php درست کرده که به نسخه ۳ هم رسیده و اینطور که پیداست خیلی امکانات خوبی داره و mssql را به خوبی پشتیبانی میکنه. مشکلش اینه که فقط روی windows قابل استفاده هست و برای لینوکس تا زمان نوشتن این مطلب وجود نداره. این سایتش و همه اطلاعات مربوطه برای علاقه مندان.

توجه : سه روش بعدی در مورد PDO هست.

روش سوم : یکی از Driver های PDO اسمش PDO_DBLIB هست که امکان اتصال و استفاده از MSSQL و Sybase را از طریق کتابخونه FreeTDS فراهم میکنه. این Extension از نسخه ۵٫۳ PHP به بعد برای ویندوز پشتیبانی نمیشه (وجود نداره) و فقط روی لینوکس قابل استفاده هستش. نکنه اینکه DB-LIB قدیمیه ، Thread un-safe هست و هزار مشکل دیگه که در زمان کار کردن بهش بر میخورین.

روش چهارم : یکی دیگه از driver های PDO اسمش PDO_SQLSRV هستش که شما باید همون extension که توی روش دوم اشاره کردم را بگیرید و با توجه به non thread safe یا thread safe بودن نسخه php با کپی کردن dll های مربوطه و اعمال تغییرات توی php.ini اون را نصب کنید. نکته اینکه فقط روی ویندوز هم جواب میده. اینجا طریقه نصب را بهتر توضیح داده.

روش پنجم : این روش که هم روی ویندوز و هم روی لینوکس جواب میده (بدیهی هست که باید ODBC روی سیستم عامل نصب باشه به همراه Extension مربوطه) از طریق PDO_ODBC هستش.

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

و اما کد :

try{
  $hostname = "host,port";
  $dbname = "database_name";
  $username = "username";
  $pw = "password";
       
  $pdo = new PDO ("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname; Uid=$username;Pwd=$pw;");
       
} catch (PDOException $e) {
  echo "Failed : " . $e->getMessage() . "\n";
  exit;
}
 
$query = $pdo->prepare("select field_name from table");
$query->execute();
 
for($i=0; $row = $query->fetch(); $i++){
  echo ($i + 1)." - ".$row['field_name']."";
}

نکته مهم : یکی از مشکلات اصلی دوستان درست set نکردن hostname$ هستش. متوجه باشین دادن ip یا ادرس FQDN (مثل mssql.mydomain.com) ممکنه خطای timeout بده. اونجاست که شما باید به دو نکته توجه کنید.پورت پیش فرض ۱۴۴۳ هست اما اگه شما چند تا instance داشته باشین اونوقت پورت ها به صورت رندوم اختصاص داده میشه و باید توی host$ از instance name استفاده کنید یا پورت بدین ، اینطوری :

$hostname = "{IP ADDRESS},6688"; // port version
$hostname = "{IP ADDRESS}\SQLEXPRESS"; // instance version

پس حتما از مسئول هاست بپرسین تنظیماتشون چیه و اگه خودتون نصب میکنید از instance name استفاده کنید. (توی SQL server Configuration Manager هست).

22 پیام برای اتصال و استفاده از پایگاه داده MSSQL در PHP

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

نشانی ایمیل شما منتشر نخواهد شد.