PHP подготовленный оператор - сбросить указатель строки - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть код ниже, который комментарии должны четко объяснить.Я хочу запросить файл для получения данной информации, а затем, как только результаты будут возвращены, добавить поле в результирующий массив.Затем обратитесь к полученному массиву позже в моей программе.

Проблема с кодом ниже состоит в том, что я думаю, что массив находится в последней записи во второй раз, когда я пытаюсь выполнить цикл ... и сбросить ($ stmt1)терпит неудачу, потому что $ stmt1 не "объект массива" ...

<?php 

$sql1 = "SELECT dpdpt, SUM(dpbir) FROM dwhlib.dwdptstr WHERE dpdpt < '312' GROUP BY dpdpt ";

//Setup connection
$conn_resource = db2_connect ( "*LOCAL", "", "" );

//Verify connection successful
if (! $conn_resource) {
    echo "Connection failed. SQL Err:";
    echo db2_conn_error ();
    echo "<br/>";
    echo db2_conn_errormsg ();
    exit ();
}

//Prepare the stmt
$stmt1 = db2_prepare ( $conn_resource, $sql1 );

//Execute the prepared statement
if (! db2_execute ( $stmt1 )) {
    echo 'The db2 execute failed. ';
    echo 'SQLSTATE value: ' . db2_stmt_error ();
    echo ' Message: ' . db2_stmt_errormsg ();
    exit ();
}

//Loop through all rows, adding a third field
while ( $row1 = &db2_fetch_array ( $stmt1 ) ) {
    $row1[2] = "TEST";
}

//Reset stmt or array back to first record
//??

//Print results
echo "<table border=1>";
while ( $row = db2_fetch_array ( $stmt1 ) ) {
    echo "<tr>";
    echo "  <td>" . $row[0] . "</td>";
    echo "  <td>" . $row[1] . "</td>";
    echo "  <td>" . $row[2] . "</td>";
    echo "</tr>";
}
echo "</table>";

?>

1 Ответ

2 голосов
/ 20 апреля 2011

Я не думаю, что это возможно. Но на самом деле нет веской причины пытаться сделать это так или иначе.

Будьте проще. Просто создайте массив с первого раза.

$rows = array();
//Loop through all rows, adding a third field
while ( $row = db2_fetch_array ( $stmt1 ) ) {
    $row[2] = "TEST";
    $rows[] = $row;
}
db2_free_result($stmt1);

//Print results
echo "<table border=1>";
foreach($rows as $row) {
    echo "<tr>";
    echo "  <td>" . $row[0] . "</td>";
    echo "  <td>" . $row[1] . "</td>";
    echo "  <td>" . $row[2] . "</td>";
    echo "</tr>";
}
echo "</table>";

В худшем случае это временно удвоит использование памяти во время создания массива.

...