#php #mysql #sql #mysqli
#php #mysql #sql #mysqli
Вопрос:
Второй запрос не работает, и я пытаюсь повторить всю информацию во втором запросе из другой таблицы, но появляется следующее сообщение:
Undefined property: stdClass::$titulo
(и остальная часть «resultado2»)
Я попытался выполнить while, как в первом запросе (while ($nfila = $resultado2-> fetch_object())), но появляется другое сообщение об ошибке:
Trying to get property of non-object
<?php
$usuario = $_SESSION['usuario_valido'];
$consulta = "SELECT * FROM `lista-usuarios` WHERE categoria='favoritos' AND nombreusuario='$usuario' ORDER BY pelicula ASC";
$resultado = $conexion->query($consulta);
if ($resultado)
{
$cont3 = 1; //Para el id de la peli
$i = 0; //Para un class unico
while ($nfila = $resultado->fetch_object())
{
$pelicula = "peli" . $cont3; //Para hacer un id unico de cada pelicula
$i ;
echo "<form role='form' id='$pelicula'><table class='table table-striped'>";
echo "
<tr>
<td>" . $cont3 . "</td>
<td class='celda2'>" . $nfila->pelicula . "</td>
<td class='celda2'>" . $nfila->anio . "</td>
<td class='celda2'><button type='button' class='infoCompleta btn btn-default' data-toggle='modal'data-target='.modal" . $i . "'><span class='glyphicon glyphicon-hand-right'></span> Info Completa</button></td><td class='celda2'><button type='button' class='eliminarFav1 btn btn-danger'><span class='glyphicon glyphicon-remove-sign'> </span> Favoritos</button></td>
</tr>";
$consulta2 = "SELECT * FROM `peliculas` WHERE titulo='$nfila->pelicula'";
$resultado2 = $conexion->query($consulta2);
if ($resultado2)
{
echo "
<div class='modal fade bs-example-modal-lg modal" . $i . "' tabindex='-1' role='dialog' aria-labelledby='myLargeModalLabel'>
<div class='modal-dialog modal-lg'>
<div class='modal-content'>
<div class='modal-header'>
<button tyle='button' class='close' data-dismiss='modal' aria-hidden='true'>amp;times;</button>
<h4 class='modal-tigle'>" . $nfila->titulo . "</h4>
</div>
<div class='modal-body'>
<center><a target='_blank' href='imagenes/" . $nfila->imagen . "'>
<img class='img-top-peliculas' src='imagenes/" . $nfila->imagen . "' class='img-rounded '></a>
</center><br />
<p><strong>Titulo Original: </strong>" . $nfila->tituloOriginal . "</p>
<p><strong>Año: </strong>" . $nfila->anio . "</p>
<p><strong>Duracion: </strong>" . $nfila->duracion . " min.</p>
<p><strong>País: </strong>" . $nfila->pais . "</p>
<p><strong>Director: </strong>" . $nfila->director . "</p>
<p><strong>Reparto: </strong>" . $nfila->reparto . "</p>
<p><strong>Género: </strong>" . $nfila->genero . "</p>
<p><strong>Sinopsis: </strong>" . $nfila->sinopsis . "</p>
</div>
<div class='modal-footer'>
<button type='button' class='btn btn-default' data-dismiss='modal'>Cerrar</button>
</div>
</div>
</div>
</div>";
}
echo "<input name='usuario' type='hidden' value='$usuario'>";
echo "<input name='titulo' type='hidden' value='$nfila->pelicula'>";
echo "<input name='anio' type='hidden' value='$nfila->anio'>";
echo "<input name='categoria' type='hidden' value='categoria' class='cat'>";
echo "</table></form>";
$cont3 ;
}
echo "<span class='datos'></span>";
}
else
{
echo "Hubo un problema al cargar las peliculas";
}
Ответ №1:
Вы не извлекаете результаты из $resultado2 = $conexion->query($consulta2);
. Вы все еще используете последнее $nfila
из предыдущих $nfila = $resultado->fetch_object()
. Я предполагаю, что вы хотите что-то вроде:
if ($resultado2) {
$nfila2 = $resultado2->fetch_object();
Затем используйте $nfila2
в этом внутреннем условном, где вы echo
выводите другую часть.
echo "
... stuff ....
<h4 class='modal-tigle'>" . $nfila2->titulo . "</h4>
... more stuff....";
Кроме того, я не рекомендую вложенные запросы к одному и тому же соединению. Я бы сделал выборку всего исходного набора:
$results = $resultado->fetch_all();
foreach($results as $nfila) {
//Do stufff
Однако fetch_all
в mysqli возвращаются только массивы, а не объекты, поэтому просто убедитесь, что вы преобразовали $nfila->pelicula
ссылки в $nfila['pelicula']
Комментарии:
1. Большое вам спасибо, это работает, я хотел бы задать еще один вопрос. Кто-то сказал мне: «Это отразится на производительности приложения, потому что в цикле выполняется n запросов, которые в зависимости от конфигурации сервера могут его выбросить, возможно, лучше поставить другой способ сделать это». Это хороший способ сделать это? Или я должен поступить иначе?
2. Да, я бы сделал это в одном объединенном запросе, поскольку вы используете в
$nfila->pelicula
качестве ключа во 2-й таблице. Также вы можете столкнуться с выполнением 2 активных запросов к одному и тому же соединению подобным образом, поэтому я бы, по крайней мере, выполнил fetch_all() для первого результата запроса и повторил предоставляемый массив.3. Хорошо, но считаете ли вы, что есть проблема, как и я?
4. Я бы избегал вложенных запросов. Смотрите Обновление внизу моего ответа
5. Хорошо, большое вам спасибо, ответ был очень полезным.