Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的MySQL存储过程Empty在PHPMyAdmin中工作_Php_Mysql_Stored Procedures_Pdo - Fatal编程技术网

PHP中的MySQL存储过程Empty在PHPMyAdmin中工作

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;

我有以下存储过程。它在phpMyAdmin中工作得很好,但当我尝试使用PHPPDO库运行它时,没有得到任何错误,只有一个空数组

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;