如何将参数值从 PHP 传递给 jasper 报告查询?

How can I pass a parameter value from PHP to jasper report query?

我想将学号 '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

在此命令中

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

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

在你的jrxml里面定义参数(使用你的数据库对应的class)

<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} 的正确 class(与数据库列相同)并传递相同的 class 作为参数很重要,因为 jasper 报告将使用 准备好的语句 执行查询时。

注意: 您可以使用查询表达式 i.stid='$P!{parameter1}' 并且 jasper 报告将进行字符串替换,但不推荐这样做,因为您的代码将允许 sql注射.

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

我的方法完全不符合文档,但更容易和适用。我希望我的方法能帮助其他人,他们也会像我一样寻找类似的解决方案;)不需要在报告中添加额外的参数来完善报告,只需覆盖 [=15] 解析的 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");