九月星空

Other

Windows下PHP连接MSSQL和ORACLE的环境配置

作者: 2014年01月08日, 分类:Other

php连接mssql
PHP 5.2.x之前的版本内置扩展只支持连接mssql,而且只支持mssql2000.
而PHP 5.3.x之后的版本内置扩展不再支持各版本的mssql.如果有项目用的数据库为mssql2000,不想麻烦的话,就降级选择使用老版本的php即可.
如果要求必须使用的php版本高于5.3.x或mssql版本不小于sql2000(mssql 2000/2005/2008),请参考以下环境配置
*为了简化配置流程,以集成环境为例(我这边使用国内Nginx高手张宴做的WEB服务集成环境APMServ).
1.下载SQL Server Driver for PHP 1.1驱动(只支持php5.2和php5.3,更高请下载此驱动的2.0或3.0版) 和 Microsoft SQL Server 2008 Native Client
*Microsoft SQL Server Native Client版本取决于所使用的SQL Server Driver for PHP版本。
参考页面(内含Microsoft SQL Server Native Client各版本下载,至于SSDP1.1 请自行搜索下载.)
http://msdn.microsoft.com/zh-cn/library/cc296170(v=sql.90).aspx

2.解压SSDP 1.1,里面有for php5.2和php5.3的动态链接库文件,拷贝相应php版本对应的dll文件到phpext目录下,并在php.ini文件中添加相应配置
例如我这边php版本是5.2.6 添加
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_sqlsrv_52_ts_vc6.dll

3.接下来安装Microsoft SQL Server 2008 Native Client,
可不要认为Microsoft SQL Server 2005 Native Client是用来连接mssql 2005的,Microsoft SQL Server 2008 Native Client是用来连接mssql2008的.
之前我测试的是连接mssql2005,安装前者测试php连接页面还是有错误提示的.后来看了参考页面才知道只是对应SSDP版本的.
环境配置完成,重启Apache生效.
MSSQL身份验证有Windows身份验证 和 SQL Server身份验证,后者可用于远程连接.
以下为Windows身份验证方式连接

1
2
3
4
5
6
7
8
$serverName = "(local)SQLEXPRESS";
$connectionInfo = array("Database"=>"test");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Unable to connect.</br>";
     die( print_r( sqlsrv_errors(), true));
}

SQL Server身份验证的话这么写.
$connectionInfo = array("UID"=>"sa", "PWD"=>"password", "Database"=>"test");

SQL Server Driver for PHP API参考
http://msdn.microsoft.com/zh-cn/library/cc296152(v=sql.90).aspx

SQL Server Driver for PHP 2.0和3.0下载(For PHP 5.3.6 or PHP 5.4,配合Microsoft SQL Server 2012 Native Client使用)
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=20098

php连接Oracle
PHP访问Oracle数据库最简单方法是使用Oracle Instant Client库(OCI扩展).
1.首先要下载Oracle Instant Client库,针对不同的Oracle服务端要下载不同版本的客户端库.官方给出的说明是"使用 Instant Client 11g 时,PHP OCI8 连接到所有版本的 Oracle 9.2、10.x 和 11.x 数据库。"
我这边测试的远程Oracle服务端是10.2版本,测试没成功,不知道哪儿出了问题.所以下载了Instant Client 10g这个版本.如果你和我的情况一样,建议选择这个版本,因为这个版本就只有8个文件,不想设置环境变量的话可以直接拖进c:windowssystem32里.
Oracle Instant Client库各版本下载地址 http://www.oracle.com/technetwork/topics/winsoft-085727.html
2.解压这个库到任意目录并把这个目录设置到系统环境变量path中(可能需要重启操作系统才可生效.),当然如果用10g这个版本可以不用设置,直接按上一条说的方法做.
*环境变量生效后,如果本机还安装有Oracle客户端和使用其进行连接的软件,则这个软件可能会连接数据库失败.因为两个Oracle环境变量冲突. 我这边是用软件的时候把c:windowssystem32下的oci.dll改名,需要用php连接的时候再改回来.当然实际环境中一般不会有这种特殊问题.
3.Web集成环境用的是xampp1.8.2,内集成php5.4.16,打开php.ini,搜索oci8
;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client
用到哪一个就删除前面的引号.
环境配置完成,重启Apache生效.
测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$conn = oci_connect('id', 'pw', '192.168.0.3/orcl', 'UTF8');
if (!$conn) {
    $e = oci_error();
    print htmlentities($e['message']);
    exit;
}else {
    echo "连接oracle成功!";
}
$stid = oci_parse($conn, 'select * from tables');
oci_execute($stid);
 
echo "<table>n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>n";
    }
    echo "</tr>n";
}
echo "</table>n";
?>
2 Comments 更多...

找啥捏?

使用下方搜索框搜索本站:

还没找到你想搜索的东东?那就给哥留言或者联系哥吧!

博客链接

随便看看,不收钱的啊……