这是我的存储过程语句
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百度了很长时间,一直无解,求高手指导!!!
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百度了很长时间,一直无解,求高手指导!!!
解决方案 »
- 修改字符串中最后一个值
- phpmyadmin如何替换某一个字段的相同值
- 在mysql的存储过程中是否可以使用PREPARE来动态执行SQL语句进行数据表数据的插入.
- fulltext 相关性的问题
- 这个sql应该怎么改
- 请问如何在mysql-4.0.20中设置和修改root的密码,以及如何新建用户和分配用户权限...
- 问一个问题:如何把SQL的一个表的各个行的某一列进行比较
- java怎么链接数据库?(在线等待)
- 并非问题,只是个汇总,也是自己的学习总结,希望大家也多来补充,为初学者提供帮助^_^
- 4表关联查询怎么写?
- 吐血请教redhat下mysql问题
- 用Navicate 8 for MySQL如何建存储过程?
$query = $_SGLOBAL['db']->query("select @uid");
return $query;
Resource id #9
实在不解。
PROCEDURE *** can't return a result set in the given context
在csdn的blog上搜索到一解决方法为
一存储过程,其中有select操作,执行的时候出现1312错误,不能在给定场景中返回记录集。解决方法为在连接mysql的时候添加CLIENT_MULTI_RESULTS 或 CLIENT_MULTI_STATEMENTS选项
试用之,无效仍旧期盼。。
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救命啊。
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);
}
$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)上
各位高手,还有什么方法么?
在存储过程中用 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中得到的结果为空继续查。,.,.,.,.,
用了这么多年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);
}
这句话的意思是,你的存储过程返回的结果集是多维数组,但是你的PHP程序没有办法捕捉到!
我觉得你封装好的类肯定是MYSQL接口,而不是MYSQLI接口!!!赶紧换吧!!
last_insert_id() 必需要求,数据表的类型为inndb好不好,,,,,,
近回空数据是说明你的表类型不对啊,查查看吧,