如何将参数值从 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");
我想将学号 '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");