Как я могу передать значение параметра из PHP в запрос отчета Jasper?

Я хочу передать номер студента '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

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} и передать тот же класс, что и параметр, так как отчет будет использовать подготовленное заявление когда запрос выполнен.

Замечания: Вы можете использовать выражение запроса i.stid='$P!{parameter1}' и jasper report будет выполнять подстановку строк, но это не рекомендуется, так как ваш код позволяет вводить sql.

1

Другие решения

Я столкнулся с тем же вопросом в последние дни тоже. Я использую ту же библиотеку для приятного отображения отчетов в PHP на основе отчетов, созданных в iReports. Вопрос для меня заключался в следующем: мне нужно было использовать несколько фильтров для уточнения отчета в соответствии с моими потребностями. Обычно параметры, которые я использовал, динамически соответствуют данным из БД.

Мой подход совершенно не соответствует документации, но он более прост и применим. Я надеюсь, что мой подход поможет кому-то еще, кто будет искать подобное решение, подобное моему;) Нет необходимости добавлять дополнительные параметры в отчет для уточнения отчета, просто перезаписать SQL, проанализированный PHP, добавив новые параметры непосредственно в 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");
0

По вопросам рекламы [email protected]