TP源码中DbSqlsrv.class.php问题

错II过 发布于 2014/11/04 21:50
阅读 983
收藏 0

TP3.1.3的,源码中Extend/Driver/Db/DbSqlsrv.class.php这个类

类里有一个query方法

public function query($str,$bind=array()) {
        $this->initConnect(false);
        if ( !$this->_linkID ) return false;
        //释放前次的查询结果
        if ( $this->queryID ) $this->free();
        N('db_query',1);
        // 记录开始执行时间
        G('queryStartTime');
        $str    =   str_replace(array_keys($bind),'?',$str);
        $bind   =   array_values($bind);
        $this->queryStr = $str;
        $this->queryID = sqlsrv_query($this->_linkID,$str,$bind, array( "Scrollable" => SQLSRV_CURSOR_KEYSET));
        $this->debug();
        if ( false === $this->queryID ) {
            $this->error();
            return false;
        } else {
            $this->numRows = sqlsrv_num_rows($this->queryID);
            return $this->getAll();
        }
    }



这个方法有两个参数,我要调用这个方法执行存储过程,

我的查询代码如下:

$bb=M()->query("exec QPTreasureDB.dbo.php_user_info",array('UserID'=>'{$UserID}'));
			var_dump($bb);



这边我输出的永远是
boolean false


可以确定的,我的数据库连接是正确的,执行普通的sql语句都没问题,可以获取数据,

执行存储过程就 返回boolean false

以下是问题补充:

@错II过:$bb=M()->query("exec QPTreasureDB.dbo.php_user_info @UserID=$UserID"); var_dump($bb); 这种方法拼装成的语句在调试信息中打印出的是和在数据库中的一模一样,但是还是没有返回值。。 (2014/11/04 22:10)
加载中
0
ClownFish
ClownFish
存储过程不是这样调用的。你得把php中的变量转化成sql中的变量
ClownFish
ClownFish
回复 @错II过 : SQL Server中执行带参数的存储过程的方法是: EXEC 存储过程名字 ‘参数1′,’参数2′,数值参数 EXEC 是一个关键字。 字符串参数使用单引号括起来,数值参数不需要使用单引号
错II过
错II过
我也用过这样子的 $bb=M()->query("exec QPTreasureDB.dbo.php_user_info @UserID=$UserID"); var_dump($bb); 返回也是不对。。
错II过
错II过
请问 如何转化为sql中的变量呢?
0
ClownFish
ClownFish

$bb=M()->query("exec QPTreasureDB.dbo.php_user_info 'UserID'",array('UserID'=>$UserID));你看看这样可以不,我没用过sql server。sql server调用存储过程的方式我也是刚百度来了。你可以理解下原生态的sql server是怎么调用存储过程的,你在php中就怎么拼装。thinphp只是帮你做了一次拼装的,最后还是需要调用sql server去执行sql。

错II过
错II过
@ClownFish 求解,什么叫用thinkphp的执行原生语句的方法
ClownFish
ClownFish
回复 @错II过 : 哈哈!那就用thinkphp的执行原生语句的方法,别封装了
错II过
错II过
回复 @ClownFish : 如何用TP呢 。。。
错II过
错II过
回复 @ClownFish : 大神还在么。。用源生的方法执行一样的sql语句得到了正确的数据。。
错II过
错II过
回复 @ClownFish : ............
下一页
返回顶部
顶部