[英]How to connect to MS SQL 2000 from PHP 5.4?
我使用ZendFramework和PHP版本5.4.12,我的操作系统是Windows7。用于连接的参数是
resources.db.adapter = "sqlsrv"
resources.db.params.pdoType = "mssql"
但是我有这个例外
Fatal error: Uncaught exception 'Exception' with message '[Microsoft][SQL Server Native Client 11.0]SQL Server Native Client 11.0 does not support connections to SQL Server 2000 or earlier versions.'
因为我使用最新的PHP驱动程序。
如何连接到MS SQL Server 2000(版本8.00.760)?
我有少数几个数据库仍在运行SQL Server 2000,我不想为其他所有人恢复使用较旧的驱动程序。 经过一番摸索,这是我能想到的最好的解决方法:通过ADO使用OLEDB连接到SQL Server 2000数据库。 ADO是一个COM组件,因此您需要启用COM_DOT_NET
扩展。
我已经验证了它在安装了Native Client 11的Windows Server 2008 R2下仍然可以在PHP 5.4下使用。
<?php
$conn = new COM("ADODB.Connection") or die("Cannot create ADO COM object");
$conn->Open("Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=True;Data Source=LOCALHOST;Initial Catalog=master");
//$conn->Open("Provider=SQLOLEDB;User ID=username;Password=password;Persist Security Info=True;Data Source=host.example.com;Initial Catalog=databasename");
$rs = $conn->Execute("SELECT 1 as Number,GetDate() as Date, CAST(0 as bit) as Boolean, 'hello world' as String");
$fieldnames = [];
$rows = [];
while (!$rs->EOF){
$fieldnames = []; // wasteful, redoing this each time
$thisrow = [];
for ($i=0;$i<($rs->Fields->Count);$i++) {
$field = $rs->Fields[$i];
$fieldname = (string) $field->Name;
$type = $field->Type;
// field->Type is the ADO type; due personal weakness I am only handling types I actually need
if ($type == 3 || $type == 20) {
$value = (integer) $field->Value;
} elseif ($type == 4 || $type==5) {
$value = (float) $field->Value;
} elseif ($type == 11) {
$value = (boolean) $field->Value;
} else {
$value = (string) $field->Value;
}
$thisrow[] = $value; //array by index
$thisrow[$fieldname] = $value; // array by name
$fieldnames[]=$fieldname;
}
$rows[] = $thisrow;
$rs->MoveNext();
}
$rs->Close();
$conn->Close();
echo "your fieldnames are, in column order:\n";
var_dump($fieldnames);
echo "your data is, in record order:\n";
var_dump($rows);
?>
笔记:
待办事项:参数化查询。 我希望如何将这些主机更新为SQL Server 2012 Express Edition ...
因为您使用的是SQL Server Native Client版本11(版本11),该版本不再支持SQL Server 2000版本。 是的,这是一种耻辱。
要解决此问题,您应该下载一个早期版本,可以在这里找到: http : //www.microsoft.com/zh-cn/download/details.aspx?id=16978
寻找部分
Microsoft®SQLServer®2008 R2本机客户端
它仍然无法正常工作,您需要先卸载2012版本。
如果仍然无法使用,请在这里查看: http : //www.sqlservercentral.com/Forums/Topic1317581-2799-1.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.