【问题标题】:How can I pass a parameter value from PHP to jasper report query?如何将参数值从 PHP 传递给 jasper 报告查询?
【发布时间】:2016-01-27 10:52:14
【问题描述】:

我想将学生编号'2014000030' 作为参数值传递,以便我只获取该学生的报告。我如何使用代码下方的 sql 查询来做到这一点。下面的代码是我如何做到的,但它不起作用,我哪里出错了?

PHP 代码

<?php
 //Import the PhpJasperLibrary
include_once('PhpJasperLibrary/tcpdf/tcpdf.php');
include_once("PhpJasperLibrary/PHPJasperXML.inc.php");

//database connection details

$server="localhost";
$db="student_portal";
$user="root";
$pass="";
$version="0.8b";
$pgport=5432;
$pchartfolder="./class/pchart2";

$value = '2014000030';

//display errors should be off in the php.ini file
ini_set('display_errors', 0);

//setting the path to the created jrxml file
$xml =  simplexml_load_file("test.jrxml");

$PHPJasperXML = new PHPJasperXML();
//$PHPJasperXML->debugsql=true;
$PHPJasperXML->arrayParameter=array("parameter1"=>$value);
$PHPJasperXML->xml_dismantle($xml);
$PHPJasperXML->transferDBtoArray($server,$user,$pass,$db);
$PHPJasperXML->outpage("I");    //page output method I:standard output  D:Download file
?>

SQL 查询

SELECT i.stid,i.surname,i.first_name,i.other_names,i.dob,i.course,b.branch_name,r.exam_no,r.modules,m.module_name,r.result,rr.remark FROM modules m,info i,results r,branches b,result_remarks rr WHERE r.modules=m.module_code AND i.campus_code=b.branch_code AND i.stid=r.stid AND rr.result=r.remark

【问题讨论】:

  • 最终这应该是 i.stid='2014000030',但我不知道如何将 PHP 中的值传递给报告。请帮助那家伙。谢谢
  • 它是数据库表中的整数类型。我不确定你是否正确地回答了我的问题。我想将学生编号 2014000030 从 PHP 代码传递给 jaspereport,这样我就只能得到这个特定学生的报告。

标签: php jasper-reports parameter-passing


【解决方案1】:

在这个命令中

$PHPJasperXML->arrayParameter=array("parameter1"=>$value);

您正在将值作为参数传递给 jasperReport,参数名称为 "parameter1"

jrxml 中定义参数(使用与您的数据库对应的类)

<parameter name="parameter1" class="java.lang.String"/>

然后在查询中使用它 (i.stid=$P{parameter1})。

SELECT i.stid,i.surname,i.first_name,i.other_names,i.dob,i.course,b.branch_name,r.exam_no,r.modules,m.module_name,r.result,rr.remark 
FROM modules m,info i,results r,branches b,result_remarks rr 
WHERE i.stid=$P{parameter1} AND r.modules=m.module_code AND i.campus_code=b.branch_code AND i.stid=r.stid AND rr.result=r.remark

设置$P{parameter1}的正确类(与数据库列相同)并传递相同的类作为参数很重要,因为执行查询时jasper报告将使用准备好的语句

注意:您可以使用查询表达式i.stid='$P!{parameter1}',jasper report 会进行字符串替换,但不建议这样做,因为您的代码会允许 sql 注入。

【讨论】:

  • 感谢您的回复。我从哪个部分/部分定义我的 jxml 中的参数。
  • 在你的字段之前看到jasperreports.sourceforge.net/xsd/jasperreport.xsd,或者使用IDE并点击添加参数...
  • 非常感谢。我明白了,它现在正在工作。现在我了解如何使用参数。我使用了IDE中的那个。我还打开了 xml,看看它在哪里放置了参数的定义。
  • @MoloraneMothusi 如果可行,请考虑接受答案(答案旁边的绿色勾号)
【解决方案2】:

前几天我也遇到了同样的问题。我正在使用相同的库根据 iReports 中生成的报告在 PHP 中很好地显示报告。我的问题是:我需要使用一些过滤器来根据我的需要优化报告。通常,我使用的参数是根据数据库中的数据动态的。

我的方法完全不符合文档,但它更容易和适用。我希望我的方法能帮助其他人也像我一样寻找类似的解决方案;)不需要在报告中添加额外的参数来优化报告,只需覆盖 PHP 解析的 SQL 就很简单,直接在 SQL 中添加新参数... 就像我下面的例子一样简单:

$customer = $_GET['ID'];
$xml =  simplexml_load_file("reports/customers.jrxml");

$PHPJasperXML = new PHPJasperXML();
$PHPJasperXML->xml_dismantle($xml);
$PHPJasperXML->sql ="SELECT ID, NAME, ADDRESS, IMAGE FROM CUSTOMERS WHERE ID = '$customer'";
$PHPJasperXML->transferDBtoArray($server,$user,$pass,$db);
$PHPJasperXML->outpage("I");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多