Я пытаюсь создать форму поиска, которая возвращает некоторые данные из базы данных 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
ожидаемый результат:
и реальный результат:
Второе изображение показывает, что первая строка пропущена, как я могу ее решить? Спасибо заранее
Когда я прокомментировал, 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>
будет таким же, как и первое.
Другой способ - использовать буферизованный запрос. Но это будет зависеть от многих факторов.
if(oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
вернет первую строку и переместит курсор на следующую строку. Таким образом, ваш вwhile
цикл начнется во втором ряду.