在做数据对接时难免会遇到跨库查询,例如,做购物商城时就涉及到库存查询,所以就要与实际库存软件对接,若是同一类数据那就好办,互联网程序大多都是用PHP开发,通常是结合MYSQL数据。但中小型库存软件大多都是用 microsoft SQL server 在此由南昌网站建设公司百恒网络技术工程师向大家介绍PHP连接SQL server 服务器环境配置及注意事项。
在早期我们使用PHP自带的php_mssql.dll,但PHP升级到PHP5.3以上,就不再支持该库了,大家也不用担心,现在只要在服务器上安装相应的扩展即可以解决该问题,即使PHP版是5.2 也是没问题的。微软专门为PHP出了个SQL Server的扩展(Windows版本的),对于Windows下使用php开发SQL Server应用来说,这个扩展有利于利用SQL Server来开发php平台连接sql server数据库管理系统。
1.找到PHP版本相对应的组件并在PHP.ini中进行扩展。接下来详细介绍
先到微软网站下载 SQL Server Driver for PHP,链接地址:http://www.microsoft.com/en-us/download/details.aspx?id=20098,你也可以在百度搜SQLSRV20 下载,选择你认为安全的下载地址进行下载,百恒网络技术工程师建议到微软的官网下载。对服务器环境配置应该谨慎行事,同时注意下SQLSRV20 后面的数值,表对应不同版本。例如,20对应的就是5.2.x 或 5.3.x版本的,下载后该文件是一个.exe的压缩包,解压后即可以看到。
更高版本的PHP扩展文件
顺便介绍下:
其中的52、53表示就是php的5.2.x和5.3.x 版本,选择跟你php版本相匹配的;
选择vc6或vc9的主要看你使用的是什么web服务器软件,如果使用的是IIS那就选择vc9的,如果是Apache则选择vc6的.
至于ts和nts,就要看你安装的php版本是线程安全版的还是非线程安全版,ts是线程安全,nts是非线程安全.
如何查看是线程还是非线程通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
比如我的配置是IIS FastCgi + php-5.3.2-nts-Win32-VC9-x86,那么就应该选择php_sqlsrv_53_nts_vc9.dll 文件并把它放到php安装目录的ext目录下,并在php.ini中添加 extension=php_sqlsrv_53_nts_vc9.dll
重启IIS或Apache接下来运行phpinfo()就可以看到如图所示,表示PHP环境配置好了,接下来配置SQL server 数据查询相关驱动。
2.安装sqlncli.msi(SQL Server Native Client),需要注意合适的版本及位数,有的是64位的,有的是32位的,支持SQL server 版本也不一样,2005、2008、2012等。下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=15748
关于数据库访问及数据读取,php有份用户手册,里面比较详细,可以查阅,地址:http://php.net/manual/zh/book.sqlsrv.php
实例代码,如下:
/* 数据库连接 */
$serverName = "serverNamesqlexpress";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true ));
}
if ( sqlsrv_begin_transaction( $conn ) === false ) {
die( print_r( sqlsrv_errors(), true ));
}
/* 初始化参数 */
$orderId = 1; $qty = 10; $productId = 100;
/* 插入数据 */
$sql1 = "INSERT INTO OrdersTable (ID, Quantity, ProductID)
VALUES (?, ?, ?)";
$params1 = array( $orderId, $qty, $productId );
$stmt1 = sqlsrv_query( $conn, $sql1, $params1 );
/* 更新数据 */
$sql2 = "UPDATE InventoryTable
SET Quantity = (Quantity - ?)
WHERE ProductID = ?";
$params2 = array($qty, $productId);
$stmt2 = sqlsrv_query( $conn, $sql2, $params2 );
/* If both queries were successful, commit the transaction. */
/* Otherwise, rollback the transaction. */
if( $stmt1 && $stmt2 ) {
sqlsrv_commit( $conn );
echo "Transaction committed.
";
} else {
sqlsrv_rollback( $conn );
echo "Transaction rolled back.
";
}
?>
以上操作步骤是百恒网络技术工程师实际操作经验,希望此文对广大站长有所帮助。
专业专注于南昌网站设计,为用户提供高品质的网络产品和优质的服务是我们始终追求的目标!