ฉันกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ MSSQL ในเครื่องของฉันจากไฟล์ PHP อย่างง่ายโดยใช้ฟังก์ชัน sqlsrv_connect() แต่ทุกครั้งที่ฉันเรียกไฟล์ในเบราว์เซอร์ผ่าน localhost มันจะส่งข้อผิดพลาด 500 (Internal Server Error) ว่า: "ข้อผิดพลาดร้ายแรงของ PHP: ข้อผิดพลาดที่ไม่ได้ตรวจจับ: การเรียกไปยังฟังก์ชันที่ไม่ได้กำหนด sqlsrv_connect() ใน C:\inetpub\wwwroot\AJAX_Tutorial\get_db_data.php:4". get_db_data.php เป็นไฟล์ที่ฉันพยายามเชื่อมต่อเซิร์ฟเวอร์ ดูเหมือนว่า PHP หรือ localhost ไม่สามารถระบุฟังก์ชัน sqlsrv_connect() ได้ แต่เท่าที่ฉันกังวล ฉันทำทุกวิถีทางเพื่อให้แน่ใจว่า PHP เชื่อมต่อกับ SQL Server
สภาพแวดล้อมของฉัน:
Windows 10 Pro เวอร์ชัน 21H2 64 บิต
สิ่งที่ฉันได้ทำ:
- IIS ที่เปิดใช้งานทำให้มั่นใจได้ว่า CGI/Fast CGI ทำงาน
- ติดตั้ง PHP 8.1.1 non-thread safe รุ่น x64 ที่ C:\Program Files\PHP-8.1.1
- ใน C:\Program Files\PHP-8.1.1 เปลี่ยนชื่อไฟล์พัฒนา php.ini เป็น php.ini
- ในไฟล์ php.ini ให้ยกเลิกการแสดงความคิดเห็นในคำสั่ง extension_dir = "ext"
- ดาวน์โหลด php_wincache.dll และเพิ่มไปยังไดเร็กทอรี ext เริ่มต้นของ PHP
- เพิ่มบรรทัด extension=php_wincache.dll ที่ส่วน Dynamic Extensions ของไฟล์ php.ini
- ติดตั้ง PHPManagerForIIS_V1.5.0 และกำหนดค่า IIS ตามนั้น เพื่อให้ PHP สามารถโฮสต์ผ่าน IIS เปิดใช้งานส่วนขยาย php_wincache.dll ที่นี่ด้วย
- ติดตั้ง MSSQL Server 2019 Developer Edition พร้อมกับ Management Studio ที่เกี่ยวข้อง
- สร้างฐานข้อมูลและตารางตามลำดับใน SQL Server ที่ฉันต้องการเชื่อมต่อจาก PHP
- ตรวจสอบให้แน่ใจว่ามีการติดตั้ง Microsoft ODBC Driver 17 สำหรับ SQL Server ในพีซีของฉัน ซึ่งจำเป็นโดย PHP
- ตรวจสอบให้แน่ใจว่ามีการติดตั้ง Microsoft SQL Server 2012 Native Client ในพีซีของฉัน ซึ่งจำเป็นโดย PHP
- ดาวน์โหลด Microsoft Drivers สำหรับ PHP สำหรับ SQL Server 5.9 และแยกเนื้อหาออก คัดลอกไฟล์ชื่อ php_sqlsrv_80_nts_x64.dll ในแพ็คเกจและวางลงในไดเร็กทอรี ext เริ่มต้นของ PHP
- เพิ่มบรรทัด extension=php_sqlsrv_80_nts_x64.dll ที่ส่วน Dynamic Extensions ของไฟล์ php.ini
- ในตัวจัดการ IIS ผ่านตัวจัดการ PHP เปิดใช้งานส่วนขยาย php_sqlsrv_80_nts_x64.dll
- สร้างไฟล์ phpinfo.php ในรูทของ IIS ซึ่งทำงานได้สำเร็จ แต่ไม่พบการกล่าวถึง wincache และ sqlsrvin
หลังจากขั้นตอนข้างต้น ฉันรันไฟล์ PHP จริงที่พยายามเชื่อมต่อกับ SQL Server แต่มันแสดงข้อผิดพลาดว่าไม่สามารถระบุฟังก์ชัน sqlsrv_connect() ได้ สมมติว่า php_sqlsrv_80_nts_x64.dll ไม่ถูกโหลดในขณะที่ PHP กำลังเริ่มทำงาน ฉันรัน php --ini ในพรอมต์คำสั่ง นั่นคือเมื่อข้อความต่อไปนี้ถูกส่งออกไป:
คำเตือน PHP: การเริ่มต้น PHP: ไม่สามารถโหลดไลบรารีไดนามิก 'php_wincache.dll' (ลองแล้ว: ext\php_wincache.dll (ไม่พบโมดูลที่ระบุ), ext\php_php_wincache.dll.dll (ไม่พบโมดูลที่ระบุ) ) ใน Unknown บนบรรทัด 0
คำเตือน: การเริ่มต้น PHP: sqlsrv: ไม่สามารถเริ่มต้นโมดูลได้
รวบรวมโมดูลด้วยโมดูล API=20200930
PHP คอมไพล์ด้วยโมดูล API=20210902
ตัวเลือกเหล่านี้ต้องตรงกัน
ในไม่ทราบในบรรทัด 0
ไฟล์การกำหนดค่า (php.ini) เส้นทาง:
ไฟล์การกำหนดค่าที่โหลด: C:\Program Files\PHP-8.1.1\php.ini
สแกนหาไฟล์ .ini เพิ่มเติมใน: (ไม่มี)
แยกวิเคราะห์ไฟล์ .ini เพิ่มเติม: (ไม่มี)
อย่างไรก็ตาม PHP ดูเหมือนจะทำงานได้ดี เพราะเมื่อฉันใช้เมธอด jQuerey AJAX get() และ post() จากไฟล์ HTML เพื่อดึงข้อมูลจากไฟล์ PHP อื่น ฉันก็ทำได้สำเร็จ ไม่มีข้อยกเว้นเกิดขึ้นแล้ว
ตอนนี้ฉันขาดอะไรไปซึ่งทั้ง php_wincache.dll และ sqlsrv ดูเหมือนจะไม่โหลดระหว่างการเริ่มต้น PHP และฉันไม่สามารถเชื่อมต่อ SQL Server จากไฟล์ PHP ได้ เนื่องจากฉันเพิ่งเริ่มใช้ jQuery AJAX และ PHP ฉันจึงไม่ค่อยรู้ถึงความซับซ้อนของ jQuery ดังนั้นฉันจึงติดอยู่กับปัญหาในช่วงสี่วันที่ผ่านมา ฉันใช้ทรัพยากรทุกอย่างในมือแล้ว แต่ไม่มีอะไรทำงาน กรุณาช่วย. ฉันไม่สามารถทำงานของฉันไปข้างหน้าได้เพราะเหตุนี้
ขอบคุณและขอแสดงความนับถือ!
รหัส get_db_data.php:
<?php
$serverName = "(local)"; // Optionally use port number (1433 by default).
$connectionString = array("Database"=>"TestDB"); // Connection string.
$conn = sqlsrv_connect($serverName, $connectionString); // Connect using Windows Authentication.
if($conn === false) {
echo "Connection could not be established.<br/>";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection established successfuly.<br/>";
}
sqlsrv_close($conn); // Close connection resources.
?>