PHP中的MySQL存储过程Empty在PHPMyAdmin中工作
我有以下存储过程。它在phpMyAdmin中工作得很好,但当我尝试使用PHPPDO库运行它时,没有得到任何错误,只有一个空数组PHP中的MySQL存储过程Empty在PHPMyAdmin中工作,php,mysql,stored-procedures,pdo,Php,Mysql,Stored Procedures,Pdo,我有以下存储过程。它在phpMyAdmin中工作得很好,但当我尝试使用PHPPDO库运行它时,没有得到任何错误,只有一个空数组 CREATE DEFINER=`root`@`localhost` PROCEDURE `get_gauge_values`(IN `maxdate` TIMESTAMP, IN `dashboard_id` INT) begin DECLARE finished BOOLEAN;
CREATE DEFINER=`root`@`localhost`
PROCEDURE `get_gauge_values`(IN `maxdate` TIMESTAMP,
IN `dashboard_id` INT)
begin
DECLARE finished BOOLEAN;
DECLARE line_timestamp TIMESTAMP;
DECLARE line_tagid INT;
DECLARE line_name VARCHAR(50);
DECLARE line_value VARCHAR(50);
DECLARE cid CURSOR FOR
SELECT Max(hd.timestamp),
hd.tag_id
FROM dashboard_to_dashboard_lines ddl
JOIN dashboard_lines dl
ON dl.line_id = ddl.dashboard_line_id
JOIN historical_data hd
ON hd.tag_id = dl.gauge_tag_id
WHERE hd.timestamp <= maxdate
AND ( dashboard_id = 0
OR ddl.dashboard_id = dashboard_id )
GROUP BY 2;
DECLARE CONTINUE handler
FOR NOT found
SET finished=TRUE;
SET finished=FALSE;
DROP TABLE IF EXISTS gauge_values_temp;
CREATE TABLE gauge_values_temp
(
name VARCHAR(255),
value VARCHAR(50)
);
open cid;
START_LOOP:
LOOP
FETCH cid INTO line_timestamp, line_tagid;
IF finished <> false THEN
LEAVE start_loop;
ELSE
INSERT INTO gauge_values_temp
(name,
value)
SELECT ol.name,
hd.value
FROM dashboard_lines dl
JOIN operation_lines ol
ON ol.line_id = dl.line_id
JOIN historical_data hd
ON hd.tag_id = dl.gauge_tag_id
WHERE dl.gauge_tag_id = line_tagid
AND hd.timestamp = line_timestamp;
end IF;
end LOOP;
close cid;
SELECT *
FROM gauge_values_temp;
end
CREATE DEFINER=`root`@`localhost`
过程'get_gauge_values'(在'maxdate'时间戳中,
在“dashboard_id”INT中)
开始
声明完成的布尔值;
声明行\u时间戳时间戳;
声明行_tagidint;
声明行名称VARCHAR(50);
声明行_值VARCHAR(50);
声明的cid游标
选择最大值(高清时间戳),
hd.tag_id
从仪表板到仪表板线ddl
连接仪表板和仪表板线
在dl.line_id=ddl.dashboard_line_id上
加入历史数据高清
在hd.tag_id=dl.gauge_tag_id上
其中hd.timestamp查询($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
}捕获(PDO异常$pe){
die(“发生错误:”..pe->getMessage());
}
而($r=$q->fetch()){
回显“返回的行
”;
}
出口
我不明白为什么它在phpMyAdmin中返回结果集,但在浏览器中使用下面的PHP代码运行它会返回0行。打印($q)时我得到的只是数组()…在我看来,您需要使用
nextRowset()
,因为SP中有多个SELECT
语句,尽管要调试,您应该使用print($q->fetch())
或print($r)
,而不是使用print($q)
。这样做可能会显示SP中第一个SELECT语句的结果,然后您可以从中构建一个循环来读取所有语句。请缩进您的SQL代码!在我看来,它的可能副本似乎需要使用nextRowset()
,因为SP中有多个SELECT
语句,但要进行调试,应该使用print\r($q->fetch())
或print\r($r)
,而不是使用print\r($q)
。这样做可能会显示SP中第一个SELECT语句的结果,然后您可以从中构建一个循环来读取所有语句。请缩进您的SQL代码!可能重复的
try {
$sql = "CALL get_gauge_values('2015-12-28 09:00:00','1')";
$q = $link->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
} catch (PDOException $pe) {
die("Error occurred:" . $pe->getMessage());
}
while ($r = $q->fetch()) {
echo 'Row returned<br />';
}
exit;