Nie, stworzyłeś przygotowane oświadczenie, a następnie użyłeś normalnego zapytania, które zawiera symbole zastępcze, dlatego nie działa. Wykonaj przygotowaną instrukcję, a następnie pobierz wynik z tej przygotowanej instrukcji.
$query = "SELECT * FROM photos WHERE cata=? OR catb=? OR catc=?";
$conn = $db->prepare($query);
$conn->bind_param("sss", $cata, $catb, $catc);
$conn->execute();
$conn->bind_result($cata, $catb, $catc);
?>
<table border="1">
<tr>
<th>cata</th>
<th>catb</th>
<th>catc</th>
</tr>
<?php
while ($conn->fetch()) {
echo '<tr>';
echo '<td>' . $cata . '</td>';
echo '<td>' . $catb . '</td>';
echo '<td>' . $catc . '</td>';
echo '</tr>';
}
Lub jeśli masz mysqlnd
(natywny sterownik mysql / lub nie będziesz miał tej niezdefiniowanej funkcji), możesz również użyć get_result()
:
$query = "SELECT * FROM photos WHERE cata=? OR catb=? OR catc=?";
$conn = $db->prepare($query);
$conn->bind_param("sss", $cata, $catb, $catc);
$conn->execute();
$results = $conn->get_result(); // i like this better
?>
<table border="1">
<tr>
<th>cata</th>
<th>catb</th>
<th>catc</th>
</tr>
<?php
while ($row = $results->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $row['cata'] . '</td>';
echo '<td>' . $row['catb'] . '</td>';
echo '<td>' . $row['catc'] . '</td>';
echo '</tr>';
}
?>