[SQL] Object klasy mysqli_result nie może zostać przekonwertowany na stringa

PHP  Założony przez  pawlik1992.

Witam serdecznie. Problem jak w tytule. (z gory przepraszam za brak polskich znakow w niektórych miejscach ale ALT mi raz dziala raz nie dziala...)

Dokladniej:
Jest to plik index.php (KOD 2) w ktorym mają być wyświetlone wszystkie połowy. Chciałbym jednak aby zamiast numeru ID ryby, przynety czy haka była pobrana nazwa z innej tabeli i "wsadzona" w daną kolumnę.
Wyświetlanie tej tabeli z samymi ID działa, jednak kiedy w pętli wrzuciłem zapytanie do bazy wyjmujące nazwę tej ryby wyświetla mi błąd "Object of class mysqli_result could not be converted to string"



Problem leży gdzieś tutaj (KOD 1) zaś zapytanie do bazy jest poprawne gdyż sprawdzałem je w PHPmyadmin i wyświetla nazwę odpowiedniej ryby -->
$zap_nazwa_ryby ="SELECT nazwa FROM ryba WHERE idryba='$ryba_idryba'";
$w_zap_nazwa_ryby = $polaczenie->query($zap_nazwa_ryby);



<!--  Jesli jest zalogowany przenies go do zalogowany.php -->
<?php
session_start();

if((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true))
{
header('Location: zalogowany.php');
exit();
}
?>

<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title>Jakaryba.pl Katalog wynikow wedkarskich.</title>
</head>

<body>

<a href="rejestracja.php">Rejestracja - załóż darmowe konto!</a>
<br /> <br />

<form action="zaloguj.php" method="post">

Login:<br /><input type="text" name="login" /> <br />
Hasło:<br /><input type="password" name="haslo" /> <br />
<input type="submit" value="Zaloguj się"/>

</form>



<p1>ABY DODAWAC SWOJE POLOWY, WYSTARCZY SIE ZAREJESTROWAC! Na ta chwile bedziesz mial dostep do podgladu polowu w ograniczony sposob.</p1>


<table width="900" align="center" border="1" bordercolor="#d5d5d5" cellpadding="0" cellspacing="0">    
<tr>
<?php
require_once 'connect.php';
$polaczenie = mysqli_connect($host, $db_user, $db_password, $db_name);
mysqli_query($polaczenie, "SET CHARSET utf8");
mysqli_query($polaczenie, "SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");

$zapytanie="SELECT * FROM polow";

$rezultat = mysqli_query($polaczenie, $zapytanie);
$ile = mysqli_num_rows($rezultat);

if ($ile>=1)
{
echo<<<END
<td width="100" align="center" bgcolor="e5e5e5">id polowu</td>
<td width="100" align="center" bgcolor="e5e5e5">data polowu</td>
<td width="100" align="center" bgcolor="e5e5e5">temperatura</td>
<td width="100" align="center" bgcolor="e5e5e5">ryba</td>
<td width="100" align="center" bgcolor="e5e5e5">rozmiar ryby</td>
<td width="100" align="center" bgcolor="e5e5e5">grubosc glownej</td>
<td width="100" align="center" bgcolor="e5e5e5">grubosc przypon</td>
<td width="100" align="center" bgcolor="e5e5e5">rozmiar haka</td>
<td width="100" align="center" bgcolor="e5e5e5">nazwa zanety</td>
<td width="100" align="center" bgcolor="e5e5e5">nick usera </td>
</tr><tr>
END;
}
for ($i = 1; $i <= $ile; $i++)
{

$row = mysqli_fetch_assoc($rezultat);
$idpolow = $row['idpolow'];
$data_polowu = $row['data_polowu'];
$temperatura = $row['temperatura'];
$ryba_idryba = $row['ryba_idryba'];

$zap_nazwa_ryby ="SELECT nazwa FROM ryba WHERE idryba='$ryba_idryba'";
$w_zap_nazwa_ryby = $polaczenie->query($zap_nazwa_ryby);


$glowna_idglowna = $row['glowna_idglowna'];
$przypon_idprzypon= $row['przypon_idprzypon'];
$hak_idhak = $row['hak_idhak'];
$zaneta_idzaneta = $row['zaneta_idzaneta'];
$user_iduser = $row['user_iduser'];


echo<<<END
<td width="100" align="center">$idpolow</td>
<td width="100" align="center">$data_polowu</td>
<td width="100" align="center">$temperatura</td>
<td width="100" align="center">$w_zap_nazwa_ryby</td>
<td width="100" align="center"></td>
<td width="100" align="center">$glowna_idglowna</td>
<td width="100" align="center">$przypon_idprzypon</td>
<td width="100" align="center">$hak_idhak</td>
<td width="100" align="center">$zaneta_idzaneta</td>
<td width="100" align="center">$user_iduser</td>


</tr><tr>
END;

}


?>


</tr>
</table>

<?php
echo $ile;
?>


<!-- Wyswietl blad jesli jest w zmiennej sesyjnej -->
<?php
if(isset($_SESSION['blad']))echo $_SESSION['blad'];
?>



</body>
</html>


Z góry dziękuję za wyrozumiałość i pomoc!
Generalnie niepotrzebnie robisz wiele zapytań, po to są relacje w bazie, aby tworzyć dowolne widoki. Możesz całość w jednym zapytaniu zawrzeć, np:

Select * from polow as p
inner join ryba as r on r.idryba = p.kolumna_zawierajaca_id_ryby_w_tabeli_z_polowami;
https://www.w3schools.com/sql/sql_join_inner.asp

W skrócie - wtedy w jednym zapytaniu dostaniesz całość.

A co do problemu:
Najpierw używasz funkcji:
$row = mysqli_fetch_assoc($rezultat);

W tym momencie w zmiennej row masz tablicę z danymi z pierwszego zapytania.
Dalej już tej funkcji nie używasz, tylko próbujesz wyświetlić wyniki bezpośrednio z obiektu mysqli_result.
Innymi słowy - wykonujesz dwa zapytania. Jedno działa, drugie nie. W pierwszym najpierw skonstruowałeś zapytanie, następnie je wykonałeś i podałeś funkcji mysqli_num_rows, a następnie przepuściłeś przez mysqli_fetch_assoc i wyświetliłeś.
W drugim z kolei - skonstruowałeś zapytanie, wykonałeś je i ... tyle. Nie przepuściłeś wykonanego zapytania przez żadną funkcję, która by Ci przetworzyła wynik zapytania w tablicę.

$row2 = mysqli_fetch_assoc($w_zap_nazwa_ryby);
Dopiero teraz będziesz miał dostęp do wyniku w zmiennej $row2.
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?



Użytkownicy przeglądający ten wątek:

1 gości