作者maplenote (猫奴一只)
看板PHP
标题[请益] 遇到一个棘手的问题(资料型态遗失)
时间Thu Feb 17 21:10:30 2011
前阵子将PHP改用版本5.3.4
发现SQL 2005不能连
因为php_mssql.dll不能使用 => 爬文改用 微软官方提供的 sqlsrv
安装完成後 整个程式原本呼叫mssql的部分都修改为sqlsrv完毕
检查原本程式是否恢复"正常"时
发现一直有错误
sqlsrv_fetch_array(): 13 is not a valid ss_sqlsrv_stmt resource
大概的写法是
function A($sql)
{
//以上略..
$get = sqlsrv_query($conn,$sql, array(),
array("Scrollable" =>SQLSRV_CURSOR_STATIC));
echo "A:".gettype($get); //检测资料型态
return $get;
}
function B()
{
$sql = '...';
$getA = A($sql);
echo "B".gettype($getA); //检测资料型态
$row_getA = sqlsrv_fetch_array($getA, SQLSRV_FETCH_ASSOC);
}
在黄色的行数(最後一行)出现错误的!
找到的原因是A印出来的资料型态为resource
B印出的资料型态为unknown type
尝试用settype强制将$getA转为resource会出错
从B先产生$getA用传址呼叫的方式丢到A,指定为$get再从B印出来也是unknown
只要离开function A() 好像就挂掉了(我也要挂掉了~~阿~~~)
整个网站都是用A()先搜寻 而B的写法分散整个网站的class中
有人知道如何让return後保留resource资料型态吗?
或者该怎麽挽救这凄惨的局面
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.67.240.99
※ 编辑: maplenote 来自: 203.67.240.99 (02/17 21:11)
1F:推 alpe:看来dll爆了. 02/17 23:39
2F:→ maplenote:DLL爆了是什麽意思@@? 02/18 09:08
3F:→ maplenote:s大说的 function &A(&$sql) 也不行><" 02/18 09:12
4F:→ maplenote:找到原因了T_T 因为$conn在A()中新增,离开A就死掉了 02/18 09:43