WIN下用PHP读写MSSQL很简单,装上MSSQL客户端,再编辑PHP.INI开个扩展extension=php_mssql.dll ,就OK了. PDO的支持也是如此: extension=php_pdo_mssql.dll
可是linux下就不是那么简单的事情.
有过linux下读写MSSQL数据库经验的朋友,对于freetds这个东西肯定不陌生. 配置相对也不复杂:
先到 http://www.freetds.org/ 下载 源码包 复制内容到剪贴板
代码:
$ cd /tmp
$ wget [url]ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz[/url]解压并安装复制内容到剪贴板
代码:
$ tar zxvf freetds-stable.tgz
$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
Password:
$ make install然后编译PHP复制内容到剪贴板
代码:
$cd ../php-5.2.5
$./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
.... 其它参数 \
--with-mssql=/usr/local/freetds(也可以用 --with-sybase=/usr/local/freetds)
make 并 make install复制内容到剪贴板
代码:
$ make
$ su root
Password:
# make install配置freetds复制内容到剪贴板
代码:
# vim /usr/local/freetds/etc/freetds.conf找到类似的行
复制内容到剪贴板
代码:
# A typical Microsoft SQL Server 7.0 configuration
;[MyServer70]
; host = 192.168.0.1
; port = 1433
; tds version = 7.0把他们前面的冒号删除,把host改为你的MSSQL服务器主机名或IP地址.port改为自己的端口号,
tds version是SQLserver的版本,2000的是7.0 要是其它的版本,自己查查.
注意:[
MyServer70] 非常重要. 将会在PHP代码中代替 mssql_connect("host","sa",""); 中的 host
关于freetds的其它如 ODBC/tsql/ 配置,请参考
http://www.freetds.org/userguide/
好了,完成后重启WEB服务. PHPINFO里看看,应该有如图的信息:
再用如下代码测试:copycode
PHPCODE:
<?php
$conn = mssql_connect("MyServer70", "sa", "password");
mssql_select_db('dbname',$conn);
$msquery = "select firstname,lastname from table";
$msresults= mssql_query($msquery);
while ($row = mssql_fetch_array($msresults)) {
echo
"<li>" .
$row['titleofcourtesy'] . " " . $row['firstname'] . " " . $row['lastname'] . "</li>\n";
}
?>库和表存在并有数据.应该会返回正确的数据了.
如果有问题,查查配置文件是否正常,MSSQL服务器有没有开远程连接,防火墙等等.
到这里,MSSQL是可以用了.但感觉很不爽,PDO应该是PHP以后的标准.所以现在来搞定PDO-MSSQL:
因为有pdo-mysql配置经验,开始时我想当然的在编译PHP5时直接加参数--with-pdo-mssql=/usr/local/freetds
结果./configure时系统返回一个错误.
通过查看./configure --help 才知道,需要通过dblib来做.
复制内容到剪贴板
代码:
$cd ../php-5.2.5
$./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
.... 其它参数 \
--enable-pdo \
--with-pdo-sqlite
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
--with-mssql=/usr/local/freetds
--with-pdo-dblib=//usr/local/freetds
$ make
$ su root
Password:
# make install重启apache 刷新phpinfo页面.多了这一项表示成功:
老习惯,代码验证:
copycode
PHPCODE:
<?php
try {
$hostname = '192.168.0.1'; //注意,这里和上面不同,要直接用IP地址或主机名
$port = 1433; //端口
$dbname = "dbname"; //库名
$username = "sa"; //用户
$pw = "password"; //密码
$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
echo 'connent MSSQL succeed';
$stmt = $dbh->prepare("select firstname,lastname from table");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>输出正常..搞定!