我想将学生编号'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
答案 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");