sqlsrv函数问题

zyz_0420 2013-06-10 11:43:09
环境:Apache 2.2.22、PHP 5.3.5、数据库MSSQL2008
mssql这是PHP5.3以前版本的,怎么将以下代码改成PHP5.3之后版本的,即sqlsrv函数,自己曾试着改过一部分,但老是报错,所有只能在此求助各位了!!

<?
session_start();
//连接数据库服务器
$Link=mssql_connect(".","sa","");
//选择数据库
mssql_select_db("frienddb");
//定义SQL语句

$name=$_REQUEST["txtName"];
$address=$_REQUEST["txtAddress"];
$group=$_REQUEST["txtGroup"];

$sqlstr="";
if($name!="")
{
$sqlstr="mName='".$name."'";
}

if($sqlstr!="")
{
if($address!="")
{
$sqlstr=$sqlstr." and mAddress='".$address."'";
}
}
else
{
if($address!="")
{
$sqlstr="mAddress='".$address."'";
}
}

if($sqlstr!="")
{
if($group!="")
{
$sqlstr=$sqlstr." and tname='".$group."'";
}
}
else
{
if($group!="")
{
$sqlstr="tname='".$group."'";
}
}


if($_REQUEST["Submit"]!="")
{
$_SESSION["sqltxt"]=$sqlstr;
}
else
{
$sqlstr=$_SESSION["sqltxt"];
}
echo $_SESSION["sqltxt"];

if($sqlstr!="")
{
$Query="select count(*) from myfriends,team where myfriends.tid=team.tid and ".$sqlstr;
}
else
{
$Query="select count(*) from myfriends,team where myfriends.tid=team.tid ";
}

$rs=mssql_query($Query);//查询记录总数
$cntrow=mssql_fetch_row($rs);
$cnt=$cntrow[0];//记录总数
$PageSize=10;//每页显示10条数据
//计算总页数
if($cnt%$PageSize==0)
{
$PageCnt=$cnt/$PageSize;
}
else
{
$PageCnt=floor($cnt/$PageSize)+1;//总页数
}
$CurrentPage=floor($_REQUEST["pid"]);//当前页,如果为小数则当前页取值为小于此小数的整数
//当前页小于1
if($CurrentPage<1)
{
$CurrentPage=1;
}
//当前页大于总页数
if($CurrentPage>$PageCnt)
{
$CurrentPage=$PageCnt;
}

//设置起始页码
$Start=$CurrentPage-3;
//设置终止页码
$End=$CurrentPage+3;

//上一页
$PrvPage=$CurrentPage-1;
//下一页
$NextPage=$CurrentPage+1;
if($Start<1)
{
$Start=1;
$End=$Start+6;
}

if($End>$PageCnt)
{
$Start=$PageCnt-6;
$End=$PageCnt;
}

if($sqlstr!="")
{
$sqlstr="select top ".$PageSize." mName,mSex,mBirthday,mTel,mAddress,tname from myfriends,team where myfriends.tid=team.tid and mid not in (select top ".($CurrentPage-1)*$PageSize." mid from myfriends) and ".$sqlstr;

}
else
{
$sqlstr="select top ".$PageSize." mName,mSex,mBirthday,mTel,mAddress,tname from myfriends,team where myfriends.tid=team.tid and mid not in (select top ".($CurrentPage-1)*$PageSize." mid from myfriends) ";

}
//echo $sqlstr;

$result=mssql_query($sqlstr);//返回结果集
/*
mssql_fetch_row//取行数据
mssql_fetch_field//取列数据
*/

?>
<html>
<title></title>
<head></head>
<link href="css/demo.css" type="text/css" rel="stylesheet" rev="stylesheet"/>
<body>
<form>
<div id="outDiv">
<table border="1" id="maintable" style="width:60%">
<tr>
<?
for($j=0;$j<6;$j++)
{
$field=mssql_fetch_field($result);
echo "<td>".$field->name."</td>";
}
?>
</tr>
<? while($row=mssql_fetch_row($result))
{
?>
<tr>
<?
for($i=0;$i<count($row);$i++)
{
echo "<td>$row[$i]</td>";
}
?>
</tr>
<?
}
?>

<?
if($CurrentPage==1)
{

$PrvLink="<li class=\"nolink\">« Previous Page</li>";
$NextLink="<li><a href=\"newpage.php?pid=$NextPage\">Next Page »</a></li>";
}
else if($CurrentPage==$PageCnt)
{
$PrvLink="<li><a href=\"newpage.php?pid=$PrvPage\">« Previous Page</a></li>";
$NextLink="<li class=\"nolink\">Next Page »</li>";
}
else
{
$PrvLink="<li><a href=\"newpage.php?pid=$PrvPage\">« Previous Page</a></li>";
$NextLink="<li><a href=\"newpage.php?pid=$NextPage\">Next Page »</a></li>";
}
?>

<tr>
<td colspan="6">
<div id="pages">
<ul>
<?=$PrvLink?>
<?
for($p=$Start;$p<=$End;$p++)
{
if($p==$CurrentPage)
{
echo "<li class=\"current\">$p</li>";
}
else
{
?>
<li><a href="newpage.php?pid=<?=$p?>"><?=$p?></a></li>
<?
}
}
?>
<?=$NextLink?>
</ul>
</div>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2013-06-13
  • 打赏
  • 举报
回复
http://php.net/manual/zh/book.sqlsrv.php
zyz_0420 2013-06-13
  • 打赏
  • 举报
回复
引用 1 楼 jordan102 的回复:
一般的,将mssql 换为 sqlsrc 就可以了,但是要注意各个参数的位置和含义。 还有有些函数sqlsrv_没有,比如 mssql_fetch_row 对应的 sqlsrv_fetch_row 就没有,用 sqlsrv_fetch_array/sqlsrv_fetch_objec 代替。 具体参考手册吧
可以提供这方面的手册参考吗?在网上下载了很多PHP手册,都没有这个函数的(sqlsrv)
一起混吧 2013-06-11
  • 打赏
  • 举报
回复
一般的,将mssql 换为 sqlsrc 就可以了,但是要注意各个参数的位置和含义。 还有有些函数sqlsrv_没有,比如 mssql_fetch_row 对应的 sqlsrv_fetch_row 就没有,用 sqlsrv_fetch_array/sqlsrv_fetch_objec 代替。 具体参考手册吧
最近帮朋友改一个小东西的时候才发现的,微软专门为PHP出了个SQL Server的扩展(当然是Windows版本的),用了一下发现还是很好用的,对于Windows下使用php开发SQL Server应用来说,这个扩展有利于兼容性以及充分利用SQL Server特性。 PHP本身有个php_mssql.dll的扩展用来连接Sql server,但是貌似这个dll只是用来连接低版本 Sql server的(2000以下版本),在Sql server 2005以后版本则根本无法使用mssql_connect连接到数据库。 先到微软网站下载 SQL Server Driver for PHP :http://www.microsoft.com/downloads/details.aspx?familyid=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displaylang=en , 这是一个自解压的EXE文件,解压缩后你会得到这么几个文件: 其中的52、53表示就是php的5.2.x和5.3.x 版本,你必须选择跟你php版本相匹配的; vc6、vc9表示的是编译这个dll所使用的vc++编译器版本,基本上大多数时候,选vc6的; nts、ts表示的是否是 ThreadSafe的,得根据安装的php版本来选择,如果你不确定,就两种情况分别尝试一下好了; 我服务器上安装的是 ThreadSafe版本的php-5.2.x,所以选择的是php_sqlsrv_52_nts_vc6.dll,把这个文件拷贝到php的ext目录,比如: 1 C:\php\ext 然后修改php.ini在适当的地方加上一行: 1 extension=php_sqlsrv_52_nts_vc6.dll 然后重启web服务器就可以了。 运行一个phpinfo看看: 另外需要注意的是,如果使用这个扩展连接Sql server 2005以上版本的sql server,你还需要在机器上先安装 SQL Server Native Client :http://download.microsoft.com/download/0/E/6/0E67502A-22B4-4C47-92D3-0D223F117190/sqlncli.msi 这个扩展为php新增了一系列sqlsrv_开头的函数, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sqlsrv_begin_transaction sqlsrv_cancel sqlsrv_client_info sqlsrv_close sqlsrv_commit sqlsrv_configure sqlsrv_connect sqlsrv_errors sqlsrv_execute sqlsrv_fetch sqlsrv_fetch_array sqlsrv_fetch_object sqlsrv_fetch_metadata sqlsrv_free_stmt sqlsrv_get_config sqlsrv_get_field sqlsrv_has_rows sqlsrv_next_result sqlsrv_num_fields sqlsrv_num_rows sqlsrv_prepare sqlsrv_query sqlsrv_rollback sqlsrv_rows_affected sqlsrv_send_stream_data sqlsrv_server_info 详细的使用文档可以在之前下载的自解压文件里面找到。 摘抄一段文档里面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 /*===================================================================== This file is part of a Microsoft SQL Server Shared Source Application. Copyright (C) Microsoft Corporation. All rights reserved. THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. ======================================================= */ $serverName = "(local)"; $connectionInfo = array( "Database"=>"AdventureWorks"); /* Connect using Windows Authentication. */ $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn === false ) { echo "Could not connect.\n"; die( print_r( sqlsrv_errors(), true)); } /* Get the product picture for a given product ID. */ $tsql = "SELECT LargePhoto FROM Production.ProductPhoto AS p JOIN Production.ProductProductPhoto AS q ON p.ProductPhotoID = q.ProductPhotoID WHERE ProductID = ?"; $params = array($_REQUEST['productId']); /* Execute the query. */ $stmt = sqlsrv_query($conn, $tsql, $params); if( $stmt === false ) { echo "Error in statement execution.
"; die( print_r( sqlsrv_errors(), true)); } /* Retrieve the image as a binary stream. */ if ( sqlsrv_fetch( $stmt ) ) { $image = sqlsrv_get_field( $stmt, 0, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY)); fpassthru($image); } else { echo "Error in retrieving data.
"; die(print_r( sqlsrv_errors(), true)); } /* Free the statement and connectin resources. */ sqlsrv_free_stmt( $stmt ); sqlsrv_close( $conn ); 是不是很简单?跟平时用的mysql、mssql函数差不多的。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧