Почему oci_fetch_array ($ stid) не возвращает первую строку таблицы базы данных оракула

1

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

enter code here
if(isset($_POST['search']) && !empty($_POST["search_box"])){
$name=$_POST['search_box'];
$sql='SELECT deejays.name,available_dates.data, available_dates.venue,available_dates.location FROM deejays,available_dates';
$sql .=" WHERE deejays.name ='{$name}'";
$sql .=' AND pk_id=fk_id';
$verify="SELECT  deejays.name FROM deejays WHERE deejays.name ='{$name}'";
$stid = oci_parse($conn,$sql );
oci_execute($stid);
if (oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)){
echo "<table width=\"100%\" align=\"center\" cellpadding=\"5\" cellspacing=\"5\">
<tr class=\"source\">
    <td colspan=3 align=\"center\"><h1>The facebook tour dates for ".$name." are:</h1></td>
</tr>
<tr align=\"center\" class=\"source1\">

    <td><strong>DATA</strong></td>
    <td><strong>VENUE</strong></td>
    <td><strong>LOCATION</strong></td>
</tr>";?>
<?php while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)){ ?>
<tr align="center" class="rows">

    <td ><?php echo $row['DATA'];?></td>
    <td ><?php echo $row['VENUE'];?></td>
    <td ><?php echo $row['LOCATION'];?></td>
</tr>
<?php } ?>
</table>
<?php } else {
            $stid = oci_parse($conn,$verify );
            oci_execute($stid);
            if (oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
             { echo "This artist hasn't records on facebook/bandsintown<br>  
enter code here

ожидаемый результат: Изображение 174551

и реальный результат: Изображение 174551

Второе изображение показывает, что первая строка пропущена, как я могу ее решить? Спасибо заранее

  • 1
    Ваш первый вызов if(oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) вернет первую строку и переместит курсор на следующую строку. Таким образом, ваш в while цикл начнется во втором ряду.
  • 0
    и как я могу сделать это, чтобы начать с первого ряда снова?
Показать ещё 1 комментарий
Теги:

1 ответ

1

Когда я прокомментировал, oci_fetch_array() вернет массив, содержащий следующую строку результата запроса. Это означает, что каждый раз, когда вы его вызываете, курсор переместится в следующую строку. У меня есть два предложения.

Первый

Загрузите весь результат в массив после oci_execute(). И подсчитайте массив, если он имеет любую строку.

oci_execute($stid);
$result = array();

while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
{
    $array[] = $row;
}
//check if result is not empty
if (count($result)) {
   //the table part here.
}

И когда вы хотите отобразить его в таблице html, используйте цикл foreach для итерации массива и построения <tr>.

<?php foreach($result as $row) { ?>

    <tr align="center" class="rows">
        <t ><?php echo $row['DATA'];?></td>
        <td><?php echo $row['VENUE'];?></td>
        <td><?php echo $row['LOCATION'];?></td>
    </tr>
<?php } ?>

ВТОРОЙ

Вы можете использовать oci_fetch_all() для загрузки всех строк из запроса в массив.

oci_execute($stid);
//$result will have all the result of the current query
$count = oci_fetch_all($stid, $result);

if ($count) {
//table part here
}

И построение <tr> будет таким же, как и первое.

Другой способ - использовать буферизованный запрос. Но это будет зависеть от многих факторов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню