我尝试用PHP连接到SQL Server。在我的本地机器上使用XAMPP,一切运行良好。但现在我要将我的应用程序带到生产服务器上。
在此服务器上安装了Microsoft IIS 6.1
并运行PHP版本7.0.7
。我还从here安装了ODBC驱动程序。接下来,我将php.ini文件中的以下行取消注释:
extension=php_sqlsrv_7_nts.dll
extension=php_pdo_sqlsrv_7_nts.dll
我从official microsoft site获得了文件。
我的问题是什么?
不幸的是,在我重新启动IIS之后。 PDO函数抛出PDOException错误,并显示以下消息:
could not find driver
对于连接我正在使用以下功能,该功能在我的本地机器上运行良好:
try {
$con = new PDO("sqlsrv:Server=" . SERVER . ";Database=" . DATABASE, USERNAME, PASSWORD);
// set the PDO error mode to exception
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "No connection: " . $e->getMessage();
exit;
}
我还能做什么?
答案 0 :(得分:3)
在Windows Server上找到错误日志后,我自己解决了错误。
我的日志中出现此错误:
[21-Apr-2017 07:12:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '...\ext\php_pdo_sqlsrv_7_nts.dll' - %1 is not a valid Win32 application. in Unknown on line 0
然后我再次下载了driver并安装了x64-Driver。最后它没有任何问题。
答案 1 :(得分:0)
我花了一些时间解决“无人驾驶”错误。我经历了这里提到的一些步骤,发现了一些新的错误后对我有帮助的步骤。供将来参考:
$dbh = new PDO ("sqlsrv:Server=$server;Database=$dbname",$username,$pw);
如果添加端口,请使用:
$server = "192.168.1.15, 51022";
其中IP(可以是主机名)是您的服务器,而51022是您的端口。
答案 2 :(得分:0)
如果对某人有帮助,这里是详细的过程。 package utility;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Iterator;
import java.util.Locale;
public class OpenJDK11DateDisaster {
public static void main(String args[])
{
/*
* Example of the date string that works with Java 8 but fails to
* parse in OpenJDK 11.
*
* Note: The Locale is identical between the two versions (US, English)
*
*/
/* Java 8 Output...
Java Version = 1.8.0_265
Broken Date = September 1, 2015 3:13:29 AM MDT
Convert mills to a date.
From mills date = September 1, 2015 3:13:29 AM MDT
Broken Date = September 1, 2015 3:13:29 AM MDT
Attempting to parse broken date.
Date in mills = 1441098809000
From mills date = September 1, 2015 3:13:29 AM MDT
Java 11 output...
Java Version = 11.0.8
Broken Date = September 1, 2015 3:13:29 AM MDT
Convert mills to a date.
From mills date = September 1, 2015 at 3:13:29 AM MDT
Broken Date = September 1, 2015 3:13:29 AM MDT
Attempting to parse broken date.
java.text.ParseException: Unparseable date: "September 1, 2015 3:13:29 AM MDT"
Unable to parse broken date.
Adding in the at...
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at utility.OpenJDK11DateDisaster.main(OpenJDK11DateDisaster.java:60)
Fixed date = September 1, 2015 at 3:13:29 AM MDT
java.text.ParseException: Unparseable date: " September 1, 2015 at 3:13:29 AM MDT"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at utility.OpenJDK11DateDisaster.main(OpenJDK11DateDisaster.java:89)
Unable to parse fixed date.
*/
System.out.println("Java Version = " + System.getProperty("java.version"));
// This is the date that will parse in Java 7 but fails in Java 11
String BrokenDate = "September 1, 2015 3:13:29 AM MDT";
System.out.println("Broken Date = " + BrokenDate);
// Broken date converted to mills in Java 7.
long mills = 1441098809000L;
System.out.println("Convert mills to a date.");
DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.US);
Date millDate = new Date(mills);
System.out.println("From mills date = " + df2.format(millDate));
System.out.println("Broken Date = " + BrokenDate);
/*
* Parse these old dates.
*/
System.out.println("Attempting to parse broken date.");
df2 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.US);
Date date = null;
try {
date = df2.parse(BrokenDate) ;
} catch (ParseException e) {
e.printStackTrace();
System.out.println();
System.out.println("Unable to parse broken date.");
// For some reason, they now put an "at" word between the date and the time.
// Here we put the "at" back in and see.
// See if we can fix it.
System.out.println("Adding in the at...");
StringList fields = Acl.split(BrokenDate, ' ');
String FixedDate = "";
Iterator iter = fields.iterator();
int count = 0;
while (iter.hasNext() ) {
String field = (String)iter.next();
count++;
FixedDate += " " + field;
if (count == 3) {
// add an at
FixedDate += " at";
}
}
System.out.println("Fixed date = " + FixedDate);
// Now see if it will parse
try {
date = df2.parse(FixedDate);
} catch (ParseException e2) {
e2.printStackTrace();
System.out.println();
System.out.println("Unable to parse fixed date.");
System.exit(-1);
}
System.out.println("Was able to parse Fixed Date " + date);
}
mills = date.getTime(); // From the BrokenDate
// Should be -62112243600000 as computed on a Java 7 machine
System.out.println("Date in mills = " + mills);
// Convert the mills to a date.
millDate = new Date(mills);
System.out.println("From mills date = " + df2.format(millDate));
}
}
PHP Version - 7.4
文件
将文件粘贴到.dll
中,您的路径可能会不同。
C:\xampp\php\ext
中在底部或扩展部分中添加这两行。
php.ini
重新启动Xampp服务器,我建议重新启动计算机,然后一切都会正常运行。
检查是否启用了SqlSRV
使用 extension=php_sqlsrv_74_ts_x64.dll
extension=php_pdo_sqlsrv_74_ts_x64.dll
或http://localhost/dashboard/phpinfo.php像这样检查-
希望,它将对某人有所帮助。