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