اتصال PHP به Microsoft sql server توسط sqlsrv

MS SQL یکی از انواع دیتابیس ارائه شده توسط ماکروسافت می باشد ، این دیتابیس معمولا بر روی windows server نصب شده و میتوان هم تحت وب و هم تحت پلاتفرم های نرم افزاری دیگر مثل C sharp و … از آن استفاده نمود ، اما موضوعی که در این نوشته قصد شرح آن را دارم اتصال به آن توسط PHP است ، دیتابیسی که در PHP معمولا با آن کار می شود Mysql می باشد که بصورت پیش فرض تمامی امکانات برای این اتصال در وب سرور های شبیه Apache فراهم شده است ، اما متاسفانه برای اتصال به ms sql این امکانات بصورت پیش فرض فراهم نیست. در گذشته و ورژن های قبلی PHP از دستور mssql_connect برای اتصال استفاده میشد اما در ورژن های اخیر PHP و ویندوزهای پیشرفته تر مثل 7 این دستور به خوبی کار نمی کند و ماکروسافت را مجبور به ارائه درایوری به نام Sqlsrv کرده است .



فرض کنید میخواهیم تحت یک شبکه داخلی از کامپیوترها کلاینت به دیتابیس ویندوز سرور متصل شده و اطلاعات تبادل کنیم ، در صورتی که بخواهیم این کار را با PHP انجام دهیم ابتدا یک وب سرور مثلا wampp می بایست روی کلاینت نصب باشد ، سپس از این لینک می بایست درایور مخصوص PHP ارائه شده توسط ماکروسافت را دریافت نمایید .ورژن 3 برای نسخه PHP 5.3 برای نسخه 5.2 PHP می بایست ورژن 2 آن را از سایت ماکروسافت دریافت نمایید .  این فایل بعد از باز شدن در یک مسیری تعدادی فایل در اختیار شما قرار میدهد که هر جفت از آنها مربوط به یک ورژن از PHP و یک نوع از نصب آن می باشد . بطور مثال در صورتی که از wampp با ورژن PHP 3.5 استفاده میکنید می بایسد این دو فایل را در مسیری مشابه زیر کپی کنید :

php_sqlsrv_53_ts.dll
php_pdo_sqlsrv_53_ts.dll

C:\wamp\bin\php\php5.3.13\ext

این مسیر مربوط به Extension های PHP نصب شده می باشد که یک سری فایلهای dll در آن وجود دارد ، برای این وب سرور به این شکل است و مثلا برای xampp متفاوت است . دقت کنید در صورتی که PHP را بصورت none threaded نصب کرده اید مثلا روی وب سرور IIS اگر  کار میکنید باید از php_sqlsrv_53_nts.dll , php_pdo_sqlsrv_53_nts.dll استفاده نمایید  اما در حالت پیش فرض همان جفت فایلی که در ابتدا گفته شد استفاده می شود .

سپس می بایست این extension را در PHP.ini معرفی کنید تا توسط PHP شناسایی شود در انتهای فایل php.ini موجود در مسیر زیر :

C:\wamp\bin\apache\apache2.2.22\bin

می بایست دو خط به این شکل اضافه نمایید :

extension=php_sqlsrv_53_ts.dll
extension=php_pdo_sqlsrv_53_ts.dll

سپس وب سرور Apache را ریست نمایید تا تغییرات اعمال شود ، در صورتی که کار را درست انجام داده باشید می بایست در PHPinfo مشخصات sqlsrv آمده باشد و فعال نیز باشد . در صورتی که مشاهده نکردید مراحل انجام داده را دوباره چک کنید یا کامپیوتر را ریست کنید ، مطمئن باشید فایل درایور مخصوص ورژن خود را نصب کرده باشید ، من نسخه ی wamp زیر استفاده میکنم :

WAMPSERVER (32 BITS & PHP 5.3) 2.2E
Apache 2.2.22 – Mysql 5.5.24 – PHP 5.3.13 XDebug 2.1.2 XDC 1.5 PhpMyadmin 3.4.10.1 SQLBuddy 1.3.3 webGrind 1.0

توجه داشته باشید ویندوزی که PHP روی آن نصب میشود باید 32bit ای باشد ، هنوز ماکروسافت درایور مخصوص 64bit را ارائه نداده است و روی آن کار نمیکند (تست شده )

ویندوز مورد استفاده باید 7 یا ویستا service pack 2 به بالا  یا ویندوز سرور 2008 باشد . ( اطلاعات بیشتر ) 

در صورتی که در phpinfo اطلاعات نصب شده sqlsrv را مشاهده کردید برای اجرا لازم است Microsoft SQL Server 2012 Native Client  روی کامپیوتر کلاینت که PHP موجود است نصب شود تا دستورات sqlsrv اجرا شود . در غیر این صورت هنگام اتصال ، اخطار نصب آن را مشاهده خواهید کرد . (اطلاعات بیشتر )

درآخر کافیست توسط دستور زیر به طور مثال به دیتابیس وصل شوید :



<?php

$serverName = "serverName\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>

توجه کنید می توانید بجای عبارت serverName\sqlexpress موجود در Servername از آی پی سرور نیز استفاده نمایید .

در صورتی که کانکشن با موفقیت انجام نشد حتما فایروال ها را چک کنید ، بهتر است sql server managment  را روی کلاینت نصب کنید و از ایجاد ارتباط با سرور با این نرم افزار کاملا مطمئن باشید ، نام کاربری و پسورد می بایست در sql server تعریف شده و دارای دسترسی باشد ، نام کاربری sa بطور پیش فرض دسترسی کامل به همه قسمت های دیتابیس را دارد بهتر است در صورت دسترسی با آن نام کاربری و پسورد نیز اتصال را تست نمایید .

(لیست توابع دیگر sqlsrv)

توجه داشته باشید دستورات sqlsrv کمی با mysql متفاوت است ، سعی کنید برای ارتباط کاملا با توجه به دستور عمل های گفته شده عمل کنید .

 

 


28 پاسخ به “اتصال PHP به Microsoft sql server توسط sqlsrv”

  1. amir گفت:

    salam dooste aziz
    man daghighan ye prozhe i shabihe hamin daram yani mikham ba barname C# az Windows modiryat beshe va ba PHP ham az tarighe Internet mishe kamel rahnamaeim kooni ke chikar koonam ????
    mamnoon misham az lootfet

    • سلام این دو زبان ارتباطی با هم پیدا نخواهند کرد فقط دیتابیسشان یکی خواهد بود ، شما با سی شارپ و اس کیو ال سرور هر کار میخواهید میکنید اعم از برداشتن و قرار دادن اطلاعات و با پی اچ پی هم بصورتی که در پست نوشته شده با آن دیتابیس ارتباط برقرار میکنید . در حقیقت رابط بین این دو زبان همان اس کیو ال سرور است .

  2. amir گفت:

    میشه در مورد ارتباط بانک sql با php بیشتر توضیح بدین؟؟
    مثلا آدرس دیتا بیس رو چجوری معرفی کنم و یوزر و نحوه سلکت کردن ؟؟؟
    ممنون میشم
    واقعا سایت مفیدی دارین ….

    • در این پست دقیقا همین کار رو کردم و نحوه ی اتصال و کوئری گرفتن را توضیح دادم ، لطفا با دقت یک بار دیگردستورات را بخوانید و به منابعی که ارجاع دادم مراجعه کنید .
      موفق باشید .

  3. م.م گفت:

    سلام و وقت بخیر و خدا قوت
    زمانی فکر می کردم که برای پرسش های حرفه ای نباید به سایت های فارسی مراجعه کرد. ولی بعد از این که این پست را دیدم و محتویات دقیق و راهگشای آن در این فکر دچار تردید شدم.
    فوق العاده عالی، مختصر و مفید بود. همیشه توفیقات الهی همراه شما باشد.

  4. سیتا گفت:

    با سلام
    من با وردپرس میخوام به sql erver وصل شم.چون سایتم قبلا با اس کیو ال بوده و نمیخوام با mysqlکار کنم.در ضمن من با phpmy admin مدیریت میکنم نه با آپاجی و wamp
    میشه راهنماییم کنید.خیلی سرچ کردم ولی به فارسی چیزی پیدا نکردم.لاتینشو هم انجام دادم ولی عمل نکرد
    ممنون

  5. آرمان زحمتکش گفت:

    سلام
    من در محیط ویندوز کار نمی کنم در محیط مکینتاش کار می کنم و می خوام به یه سرور ویندوزی و دیتابیس مایکروسافت وصل شم اون dll های که مایکروسافت داده واسه مکینتاش هم هست؟ چطوری می تونم از مکینتاش به sql server وصل شم
    مرسی و تشکر

  6. الهام گفت:

    سلام دوست عزیز

    واقعا ممنون خیلی عالی و کامل بود چند وقت بود من درگیر این اتصال بودم با odbc حلش کردم ولی یه مشکل بزرگ تو encoding داشت

    بازم ممنون

  7. hosein گفت:

    سلام

    ایا این تنظیمات برای php linux با ms sql هم کار میکنه

  8. hosein گفت:

    دمت گرم احمد جان

  9. samin گفت:

    خیلی ممنون از راهنمایی دقیقتون
    اگر ممکنه دستورات دقیق select , … را بفرمایین

  10. محمد گفت:

    سلام
    آقا ممنون خیلی جالب و به موقع بود

  11. محمد گفت:

    سلام احمد جان
    برادر خیلی جالب بود فقط یه مشکل دارم
    مثلا الان از دیتابیس SQL SERVER یه فیلد رو خوندم و محتویات فیلدچون فارسیه به جاش مربع و اینا چاپ میکنه چاره چیه برادر
    خیلی لازم دارم ممنون اگه جوابمو بدی؟

  12. محمد گفت:

    البته با دستور زیر میشه محتویات بانک MYSQL رو فارسی چاپ کرد ولی برای SQLSERVER جواب نمیده متاسفانه

  13. محمد گفت:

    mysql_query(“SET NAMES ‘utf8′”);

  14. مسعود گفت:

    سلام
    ضمن تشکر از مطالب خوبتون، یک سؤال داشتم.
    اگه بخواییم از Xampp استفاده کنیم، مراحل کار چگونه است؟

  15. مهندس گفت:

    سلام .خسته نباشید.من از xampp استفاده می کنم.دقیقا نفهمیدم که چه چیزهایی رو باید دانلود و اضافه کنم که بتونم به sql server وصل بشم.ممنون میشم کمک کنید.

  16. z.s گفت:

    سلام وقتتون بخیر
    ممنون از مطالب آموزنده تون
    من یه سایت دارم ویه نرم افزار تحت ویندوز که روی ویندوز سرور نصب شده !
    حالا میخوام با php وصل بشم به دیتابیس sql ویندوز سرور و اطلاعات رو روی سایتم نشون بدم!
    ولی نمیدونم باید چکار کنم ! اگه منو راهنمایی کنید ممنون میشم.

  17. وفانور گفت:

    سلام عالی بود. ممنون.

  18. ali گفت:

    ممنون. واقعا نیاز داشتم به این آموزش

  19. احسان گفت:

    سلام من از زمپ استفاده میکنم ولی در کد پی اچ پی به sql وصل نمیشه این خطارو میده
    call to undefined function mysql_connect

  20. بهروز گفت:

    سلام . من دارم روی ویندوز سرور 2012 کار میکنم.
    متاسفانه این سیستم عامل 32 بیتی نداره کلا.
    الان راه کاری برای 64 بیتی پیدا نکردید؟

  21. کاوه گفت:

    عالی بود ممنون
    من با نسخه 64 بیتی هم تست کردم و با SQL 2016 جواب داد

  22. احسان گفت:

    سلام واقعا ممنونم ازتون کارم خیلی راه افتاد
    واقعا ممنونم

پاسخ دهید

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