我上次问的执行存储过程错误,帖子如下:
http://topic.csdn.net/u/20091205/10/49a23f64-0a6e-4d56-8487-0a8387514a5d.html
用了如下帖子的方法是解决存储过程执行错误的问题:
http://topic.csdn.net/u/20081028/14/9a76c65d-5889-4ebd-8a5a-194763b4fd5d.html
但是在程序中创建临时表就不能建立成功:mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());//这样可以执行存储过程不报错,但是程序中不能执行创建临时表
mysql_connect($this->host,$this->user,$this->pass)or die("数据库连接失败:".mysql_error());//这样执行存储过程报错,程序能创建临时表
$ctable="CREATE temporary TABLE beyond(
`mbtype` varchar(30) NOT NULL,
`mstype` varchar(30) NOT NULL,
`mname` varchar(200) NOT NULL,
`mcolor` varchar(200) NOT NULL,
`mcode` varchar(30) NOT NULL,
`cust` varchar(30) NOT NULL,
`spdp` float NOT NULL,
`souput` float NOT NULL,
`sback` float NOT NULL,
`sbeyond` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312";
//echo $ctable;
$db->query($ctable);
请问是何故?
http://topic.csdn.net/u/20091205/10/49a23f64-0a6e-4d56-8487-0a8387514a5d.html
用了如下帖子的方法是解决存储过程执行错误的问题:
http://topic.csdn.net/u/20081028/14/9a76c65d-5889-4ebd-8a5a-194763b4fd5d.html
但是在程序中创建临时表就不能建立成功:mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());//这样可以执行存储过程不报错,但是程序中不能执行创建临时表
mysql_connect($this->host,$this->user,$this->pass)or die("数据库连接失败:".mysql_error());//这样执行存储过程报错,程序能创建临时表
$ctable="CREATE temporary TABLE beyond(
`mbtype` varchar(30) NOT NULL,
`mstype` varchar(30) NOT NULL,
`mname` varchar(200) NOT NULL,
`mcolor` varchar(200) NOT NULL,
`mcode` varchar(30) NOT NULL,
`cust` varchar(30) NOT NULL,
`spdp` float NOT NULL,
`souput` float NOT NULL,
`sback` float NOT NULL,
`sbeyond` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312";
//echo $ctable;
$db->query($ctable);
请问是何故?
can't return a result set in the given contextmysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());//这样可以执行存储过程不报错,但是程序中不能执行创建临时表我用的xampp在MYSQL中没有找到相关的错误日志。程序中也没报错。 $ctable="CREATE temporary TABLE beyond(
`mbtype` varchar(30) NOT NULL,
`mstype` varchar(30) NOT NULL,
`mname` varchar(200) NOT NULL,
`mcolor` varchar(200) NOT NULL,
`mcode` varchar(30) NOT NULL,
`cust` varchar(30) NOT NULL,
`spdp` float NOT NULL,
`souput` float NOT NULL,
`sback` float NOT NULL,
`sbeyond` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312";
//echo $ctable;
$db->query($ctable);
$insert="insert into beyond select mbtype,mstype,mname,mcolor,mcode,cust,sum(PDP_num),sum(output_num),sum(back_num),((sum(output_num)-sum(back_num)-sum(PDP_num))/sum(PDP_num))*100 as beyond from superrate where left(sr_date,10) between '$fdate' and '$tdate' and (muser='办房做办' or back_num>'0') group by mcode";
//echo $insert;
$db->query($insert);
$sql="select mbtype,mstype,mname,mcolor,mcode,cust,spdp,souput,sback,sbeyond from beyond where (1=1)";
$rownum=$db->rownum($sql);//这里报SQL没有资源的错误,也就是说临时表里没数据
是什么?在这个函数中,你是不是把 connection 关掉了?CREATE temporary TABLE beyond
这种临时表,仅在同一个connection 中有效,当connection 关闭后临时表就被清除了。
$conn=mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());
mysql_select_db($this->db,$conn)or die("The database is not connect!".mysql_error());
mysql_query("set names gb2312");
return $conn;
}
function query($sql){//这里就是我的query函数了,没有关闭connection,其他地方也没有。
return mysql_query($sql,$this->connect());
}
$conn=mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());
加上红色部分,就不能创建临时表,可以执行存储过程。
不加红色部分,就能创建临时表,但执行存储过程报错,麻烦版主大哥,帮我看看,谢谢!
然后检查一下 select 部分有没有记录被选出。
select mbtype,mstype,mname,mcolor,mcode,cust,sum(PDP_num),sum(output_num),sum(back_num),
((sum(output_num)-sum(back_num)-sum(PDP_num))/sum(PDP_num))*100 as beyond
from superrate
where left(sr_date,10) between '$fdate' and '$tdate'
and (muser='办房做办' or back_num>'0')
group by mcode
不能返回结果集,现在你的SP代码是什么?在MYSQL中是否能运行
我感到非常奇怪的就是:
$conn=mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());
加上红色部分,就不能创建临时表,可以执行存储过程。
不加红色部分,就能创建临时表,但执行存储过程报错,报的错误是下面:
can't return a result set in the given context
IN mcode VARCHAR(20),
IN btype VARCHAR(50),
IN stype VARCHAR(50),
IN mname VARCHAR(255),
IN mcolor VARCHAR(200),
IN ecode VARCHAR(50),
IN munit VARCHAR(50)
)
BEGIN
DECLARE back INT;
IF LENGTH(mcode)<=0 OR LENGTH(btype)<=0 OR LENGTH(stype)<=0 OR LENGTH(mname)<=0 OR LENGTH(stype)<=0 THEN
SET back=1;
SELECT back;
else
SET back=0;
SELECT back;
END IF;
END$$DELIMITER ;
$conn=mysql_connect($this->host,$this->user,$this->pass,1,131072)or die("数据库连接失败:".mysql_error());
1.加上红色部分,可以执行存储过程UpdateMcode,但是下面的临时表里没有数据(SQL语句是正确)。$ctable="CREATE temporary TABLE beyond(
`mbtype` varchar(30) NOT NULL,
`mstype` varchar(30) NOT NULL,
`mname` varchar(200) NOT NULL,
`mcolor` varchar(200) NOT NULL,
`mcode` varchar(30) NOT NULL,
`cust` varchar(30) NOT NULL,
`spdp` float NOT NULL,
`souput` float NOT NULL,
`sback` float NOT NULL,
`sbeyond` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312";
//echo $ctable;
$db->query($ctable);
$insert="insert into beyond select mbtype,mstype,mname,mcolor,mcode,cust,sum(PDP_num),sum(output_num),sum(back_num),((sum(output_num)-sum(back_num)-sum(PDP_num))/sum(PDP_num))*100 as beyond from superrate where left(sr_date,10) between '$fdate' and '$tdate' and (muser='办房做办' or back_num>'0') group by mcode";
//echo $insert;
$db->query($insert);
$sql="select mbtype,mstype,mname,mcolor,mcode,cust,spdp,souput,sback,sbeyond from beyond where (1=1)";
$rownum=$db->rownum($sql);//这里报SQL没有资源的错误,也就是说临时表里没数据2.不加红色部分,执行存储过程UpdateMcode报错,报的错误是下面:
can't return a result set in the given context
临时表中能得到数据。
从错误信息上看,是不能返回记录集
2、存入表中再取BACK值。
另外你的 create procedure PHP中的代码是什么?
是的。这个参数 new_link 本身就是指示是否在请求相同的情况下是否创建一个新的连接。
但如果你的connection 不新建,或者你的DB不重新创建的话不应该有这个问题。