调用的过程如下...
实在不知道哪边有问题
$conn=new PDO('mssql:host=192.168.1.245;dbname=usercenter','sa','123');
$stmt=$conn->prepare("prLS_Register(?,?,?,?,?,?,?,?,?,?,?,?,?)");
$stmt->bindParam(1,$v1,PDO::PARAM_STR,4000);
$stmt->bindParam(2,$v2,PDO::PARAM_STR,4000);
$stmt->bindParam(3,$v3,PDO::PARAM_STR,4000);
$stmt->bindParam(4,$v4,PDO::PARAM_STR,4000);
$stmt->bindParam(5,$v5,PDO::PARAM_INT,4000);
$stmt->bindParam(6,$v6,PDO::PARAM_INT,4000);
$stmt->bindParam(7,$v7,PDO::PARAM_STR,4000);
$stmt->bindParam(8,$v8,PDO::PARAM_STR,4000);
$stmt->bindParam(9,$v9,PDO::PARAM_STR,4000);
$stmt->bindParam(10,$v10,PDO::PARAM_STR,4000);
$stmt->bindParam(11,$v11,PDO::PARAM_STR,4000);
$stmt->bindParam(12,$v12,PDO::PARAM_STR,4000);
$stmt->bindParam(13,$v13,PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,400);
$v1="loginname11";
$v2="pass1word11";
$v3="pass1word211";
$v4="nick121name";
$v5=1;
$v6=0;
$v7="localhost";
$v8="127.0.0.1";
$v9="13913913913";
$v10="[email protected]";
$v11="320320320320320320";
$v12="";
$v13="";var_dump($stmt);
$stmt->execute();
}catch(PDOException $ex){

echo "abc";
echo $ex->getMessage();
}
执行以后总是无法把数据插入到数据库中
数据库是sql2005
Apache Web Server Version 2.2.8
PHP Version 5.2.6

解决方案 »

  1.   

    没看出有什么毛病
    存储过程 prLS_Register 写的正确吗?
      

  2.   

    我搞定了,,,我找了个别人写的,对比了下
    错误在这个调用的过程如下...
    实在不知道哪边有问题
    $stmt=$conn->prepare("prLS_Register(?,?,?,?,?,?,?,?,?,?,?,?,?)");
    调用存储过程要加exec,我最开始按照文档上来的 用的是call
    其次后面的参数外围不用加括号,去掉就好了...
     
      

  3.   

    不知道调用存储过程的时候 call和exec有没有什么区别..用call调用不了..
      

  4.   

    call和exec的区别是:前者有返回值,后者没有或者说返回布尔值,表示成功与否
      

  5.   

    我用call就一直不能执行 返回false
    用exec就可以..
    然后我那个v13是接受的输出参数,总是不能接收到.这个是怎么回事..
      

  6.   

    你是说 存储过程怎么定义的吗??
    我用mssql_init来执行的话,是能得到返回值和输出参数的set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go/*****************************************************************************
    * Name: 用户注册接口
    * Desc:
    * Author: zhs007
    * CrtDate: 2006.08.24
    * Modify:
    * ModifyDate:
    * Memo: 
    * Return:
    * >0 用户的ID号
    * 其他:失败,失败的信息放在@chvErrMsg中
    *****************************************************************************/
    ALTER  PROCEDURE [dbo].[prLS_Register]
    @chvLoginName varchar(32), -- 登录名
    @chvPassword varchar(32), -- 密码
    @chvPassword2 varchar(32), -- 二级密码,用于转账
    @chvNickName varchar(32), -- 昵称
    @intLogo smallint, -- 脸谱ID
    @bitSex bit, -- 性别 0 男 1 女
    @chvRegisterServer varchar(15), -- 注册服务器名
    @chvIPAddress varchar(15), -- 用户登记IP地址
    @chvMobileID varchar(11),  --用户手机
    @chvEmail varchar(50),    --邮箱
    @chvIDNumber varchar(22),  --身份证
    @chvTjUser varchar(32), --推荐人
    @chvErrMsg varchar(128) output  -- 出错信息
     AS
    SET NOCOUNT ON  -- 节约反馈资源
    SET XACT_ABORT ONSET @chvErrMsg = ''
    -- 首先将左右空格去掉
    SET @chvLoginName = LTRIM(RTRIM(@chvLoginName))
    SET @chvPassword = LTRIM(RTRIM(@chvPassword))
    -- 检查帐号是否是保留字符
    DECLARE @intReturnValue int
    SET @intReturnValue = [dbo].[funIfExistsReserveWord](@chvLoginName, 1)
    IF @intReturnValue = 1
    BEGIN
    SET @chvErrMsg = '注册失败!您的注册名字中含有系统保留的单词,请您换个合适的名字再重新注册!'
    RETURN -1
    END
    SET @intReturnValue = [dbo].[funIfExistsReserveWord](@chvNickName, 1)
    IF @intReturnValue = 1
    BEGIN
    SET @chvErrMsg = '注册失败!您的昵称中含有系统保留的单词,请您换个合适的昵称再重新注册!'
    RETURN -1
    END
    -- 检查账号
    if exists (select UserID from [dbo].[AllUser] where [LoginName] = @chvLoginName)
    begin
    SET @chvErrMsg = '您的账号已被别人使用,请您换个合适的账号再重新注册!'
    RETURN -1
    end
    -- 检查昵称
    if exists (select UserID from [dbo].[AllUser] where [NickName] = @chvNickName)
    begin
    SET @chvErrMsg = '您的昵称已被别人使用,请您换个合适的昵称再重新注册!'
    RETURN -1
    end
    if len(@chvIDNumber) <> 15 and len(@chvIDNumber) <> 18
    begin
    SET @chvErrMsg = '您填写的身份证号码有误,请填写正确的身份证号码!'
    RETURN -1
    end
    DECLARE @tjUserID int
    if @chvTjUser <>''
    begin
    --select @tjUserID = [UserID] from [AllUser] where [NickName] = @chvTjUser
    select @tjUserID = [UserID] from [AllUser] where [userid] = @chvTjUser
    if @@rowcount = 0
    begin
    SET @chvErrMsg = '您填写的推荐人昵称错误,请填写正确的推荐人!'
    RETURN -1
    end
    end
    else
    set @tjUserID = 0
    -- 正常注册
    INSERT INTO [dbo].[AllUser]
    ([LoginName], [Password], [Password2], [NickName], [Sex], [Logo], [TjUser], [UserType], [RegisterTime], [RegisterServer], [IPAddress], [LastLoginTime], [LastServerID], [RightCode])
     VALUES
    (@chvLoginName, @chvPassword, @chvPassword2, @chvNickName, @bitSex, @intLogo, @tjUserID, 3, GETDATE(), @chvRegisterServer, @chvIPAddress, '2010-01-01', 0, 8)
    IF @@ERROR <> 0
    BEGIN
    SET @chvErrMsg = '注册失败,请再试一遍!'
    RETURN -1
    END
    DECLARE @intUserID int
    set @intUserID = @@IDENTITYinsert into [LogCenter].[dbo].[MainLog] (uid, ctrlid) values (@intUserID, 1)INSERT INTO [UserCenter]. [dbo].[UserDetailInfo] (UserID,Mobile,EMail,IDNumber)values(@intUserID,@chvMobileID,@chvEmail,@chvIDNumber)
    --注册之后送给用户的东西
    exec prLS_Register_Gift @intUserID
    --注册之后送给推荐用户送东西
    if @tjUserID is not null and @tjUserID > 0
    exec prLS_Register_GiftTJ @intUserID, @tjUserIDRETURN @intUserID