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

时间:2016-01-27 10:52:14

标签: php jasper-reports parameter-passing

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

2 个答案:

答案 0 :(得分: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报告将执行字符串替换,但不推荐这样做,因为您的代码将允许sql注入。

答案 1 :(得分:0)

我上个星期也遇到了同样的问题。我正在使用相同的库,根据iReports中生成的报告,在PHP中很好地显示Reports。对我来说问题是:我需要根据我的需要使用一些过滤器来改进报告。通常,我使用的参数是根据DB的数据动态生成的。

我的方法完全不符合文档,但它更容易和适用。我希望我的方法能帮助那些寻找像我一样的类似解决方案的人;)不需要在报告中添加额外的参数来优化报告,只需覆盖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");