我一直致力于为练习创建面向对象的数据库调用类,我一直在努力弄清楚如何正确地合并可滚动游标。我希望能够调用此函数以获取前10条记录的下10条记录或不同的函数。我已经达到了可以通过可滚动游标为记录指定偏移量的程度,但我无法再次调用相同的函数来获取下一个集合而不传递递增的偏移值。
我如何能够为每页指定多个记录,只需调用getNextSet()或getPrevSet()以获得我想要的结果。
我目前的想法是在某处设置静态变量并相应地递增/递减或重置它,然后将其用作函数中的偏移值。但是,我相信我听说在实例化的类中使用静态变量存在问题。
到目前为止,这是代码:
<?php
$i5DBconn = db2_connect("*LOCAL", "", "");
if (!$i5DBconn) {
echo "Database Connection failed. SQL Err:";
echo db2_conn_error();
echo "<br>";
echo db2_conn_errormsg();
die();
}
class queryDB{
var $query;
var $outputFunction;
var $parameters;
function performDBCall(){
global $i5DBconn;
$dbStatement = db2_prepare($i5DBconn, $this->query, array('cursor' => DB2_SCROLLABLE));
$i = 1;
foreach ($this->parameters as $param) {
db2_bind_param($dbStatement, $i, 'param', DB2_PARAM_IN);
$i++;
}
$result = db2_execute($dbStatement);
if (!$result){
echo "$this->query failed!. ";
echo 'SQLSTATE value: ' . db2_stmt_error();
echo ' Message: ' . db2_stmt_errormsg();
}
return $dbStatement;
}
}
class invoiceCall extends queryDB {
function testQueryFormatter($dbResultSet, $dataOffset){
$zebraStriping = 1;
?>
//snipped header row formatting
<?php
$rowLimit = 10;
while(($rowData = db2_fetch_array($dbResultSet, $dataOffset)) && ($zebraStriping < $rowLimit)){
list($dataNames) = $rowData;
?>
//snipped data formatting
<?php
$dataOffset++;
}
}
}
$offsetVal = 5;
$testQuery = new invoiceCall();
$testQuery->query = "select invoice#, status, amountpaid, amountbilled, invoicedate, paydate, custname, termofpay, balance from TESTSCHEMA.SAMPLE_INVOICE_TABLE";
//$testQuery->parameters = [8000001];
$resultSet = $testQuery->performDBCall();
$testQuery->testQueryFormatter($resultSet, $offsetVal);
?>
如果还有一些我可以改进的编码实践,请告诉我,因为我开始了第一次面向对象PHP的真实旅程。