Я работал над созданием класса объектно-ориентированного вызова базы данных для практики, и я пытался выяснить, как правильно включить прокручиваемый курсор. Я хотел бы иметь возможность вызывать эту функцию, чтобы получить следующие 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.
Задача ещё не решена.
Других решений пока нет …