这是我的存储过程语句
DROP PROCEDURE IF EXISTS `createuser` //
create procedure createuser(in uname varchar(20),in uadd varchar(24),in uver varchar(100),out uid int)
begin
insert into sp_user (U_NAME,U_ADD,U_VER,U_Ctime) values (uname,uadd,uver,NOW());
select last_insert_id() into uid;
select uid;
end //这是我的调用语句
$query = $_SGLOBAL['db']->query("call createuser('$uname','$uadd','$uver',@uid)");
return $query;
我原来的打算是在插入记录后直接返回一个记录ID,可是执行后提示
Error: MySQL Query Error
mysql str: call createuser('fawafafeaef','beijingshihaidianqu','fawefwaefawefweafwefwe-100302006',@uid)
dberr: PROCEDURE spmap.creuser can't return a result set in the given context百度了很长时间,一直无解,求高手指导!!!

解决方案 »

  1.   

    $query = $_SGLOBAL['db']->query("call createuser('$uname','$uadd','$uver',@uid)");
    $query = $_SGLOBAL['db']->query("select @uid");
    return $query;
      

  2.   

    这回虽然没有出错,但还是不行,现在显示的$query返回值是
    Resource id #9
    实在不解。
      

  3.   

    几经周折,我把存储过程一步步执行的结果,就是发现最后所有的错误都集中在#1312上了
    PROCEDURE *** can't return a result set in the given context
    在csdn的blog上搜索到一解决方法为
    一存储过程,其中有select操作,执行的时候出现1312错误,不能在给定场景中返回记录集。解决方法为在连接mysql的时候添加CLIENT_MULTI_RESULTS 或 CLIENT_MULTI_STATEMENTS选项
    试用之,无效仍旧期盼。。
      

  4.   

    继续尝试,把存储过程改为create procedure createuser(in uname varchar(20),in uadd varchar(24),in uver varchar(100),out uuid int)
    begin
    insert into sp_user (U_NAME,U_ADD,U_VER,U_Ctime) values (uname,uadd,uver,NOW()); 
    select last_insert_id() into uuid;
    end 然后在mysql cc的命令行输入
    call creuser('wefwaeea','fawefawefwaef','f1wefaewfwfe06',@uuid)
    执行成功
    继续输入 select @uuid
    返回值 44
    也成功我又回到程序中
    $query = $_SGLOBAL['db']->query("call createuser('$uname','$uadd','$uver',@uuid)"); 
    $query = $_SGLOBAL['db']->query("select @uuid"); 
    return $query;
    结果返回Resource id #8救命啊。
      

  5.   

    php的问题,怎么跑这来问了?
    try$query = $_SGLOBAL['db']->query("call createuser('$uname','$uadd','$uver',@uuid)");
    $query = $_SGLOBAL['db']->query("select @uuid"); 
    while($result = mysql_fetch_array($query))
    {
       print_r($result);
    }
      

  6.   

    呵呵,查了半天才弄明白,原来自己在5楼的时候弄混了
    $query返回的是一个资源标识符
    应该mysql_fetch_row后取【0】的
    总算变相达到了目的
    以下代码测试成功 $querya = $_SGLOBAL['db']->query("select @uuid"); 
    $nuids = $_SGLOBAL['db']->fetch_row($querya); 
    $nuid = $nuids[0];
    return $nuid;
    返回正确的ID了可这样的话还是没有达到我的目的,我原意是在mysql的存储过程中插入数据后直接返回ID的,理想中存储过程返回的值更快如果按上述方法做了,那么存储过程也就没什么意义了问题又纠结在——PHP如何取得mysql存储过程中的返回值(insert_in)上
    各位高手,还有什么方法么?
      

  7.   

    下个php手册,搜索mysql_insert_id
      

  8.   

    我的理想过程是:
    在存储过程中用 last_insert_id 或者 select max(uid) 得到最新插入的用户ID,然后返回在PHP里调用虽然有mysql_insert_id,而且刚我也试过,返回结果为空我不死心,又回到1楼的做法尝试了下
    在Mysql cc中调用过程,结果提示
    dberr: PROCEDURE spmap.creuser can't return a result set in the given context 
    在php中得到的结果为空继续查。,.,.,.,.,
      

  9.   


    用了这么多年php,没试过mysql_insert_id()函数返回空的情况,你是什么测试环境阿?
    给你贴个本地运行成功的例子作为参考(请修改相关参数)$conn = mysql_connect( "localhost", "root", "", true,131072 ) or die( "Failed to connect to MySQL server" );
    mysql_select_db( "test", $conn ) or die( "Could not select test database" );mysql_query("drop procedure if exists test1");
    $sql = "create procedure test1(OUT cc INT)";
    $sql .= "\nbegin";//\n
    $sql .= "\ninsert into aa values(null);";
    $sql .= "\nselect last_insert_id() INTO cc;";//语句加;号
    $sql .= "\nend";mysql_query($sql);mysql_query("call test1(@cc)"); $r = mysql_query("select @cc");
    while($row = mysql_fetch_array($r,MYSQL_ASSOC))
    {
    print_r($row);
    }
      

  10.   

    aa表只有一个primary key自增字段
      

  11.   

    dberr: PROCEDURE spmap.creuser can't return a result set in the given context 
    这句话的意思是,你的存储过程返回的结果集是多维数组,但是你的PHP程序没有办法捕捉到! 
    我觉得你封装好的类肯定是MYSQL接口,而不是MYSQLI接口!!!赶紧换吧!!
      

  12.   

    各位老大,,,,,,,
    last_insert_id()    必需要求,数据表的类型为inndb好不好,,,,,,
    近回空数据是说明你的表类型不对啊,查查看吧,
      

  13.   

    关键就是两点1)define('CLIENT_MULTI_RESULTS', 131072);2)$link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
      

  14.   

    一个简单的问题被你搞的这么复杂,在PHP的API里面返回的是一个结果集,你需要提取出来!有很多PAI都可以,如果你不提取返回的就是一个资源标识符!