Вы возвращаете одно значение. Если бы мне пришлось показать все карточки пользователей, я бы сделал что-то вроде этого.
<?php
require "connection.php";
$search = $_POST['search'];
$sql = "SELECT users.first_name, users.second_name, cards.card_number
FROM users
INNER JOIN cards
ON cards.user_id = users.id
WHERE
users.first_name = '$search'
OR users.second_name = '$search'";
$query = mysqli_query($db, $sql);
while ($row = mysqli_fetch_assoc($query)) {
echo $row['first_name']." ".$row['second_name']." ",
$row['card_number'];
}
?>
Это должно напечатать строку для каждой карты.
Вы также можете изменить предложение where для чего-то вот так, чтобы найти частичные строки:
users.first_name LIKE '%$search%'
Но если вы хотите иметь возможность искать номер карты и находить все карты, связанные с ее владельцем, то вы должны предпринять некоторые дополнительные шаги.
Я бы сделал go для чего-то вроде этого:
SELECT t1.customerIDi, cards.number, customer.*
FROM CARDS
LEFT JOIN customer ON cards.CustomerID = customer.id
INNER JOIN (
SELECT customer.id AS customerIDi
FROM customer
LEFT JOIN cards
ON cards.CustomerID = customer.id
WHERE
Cards.Number = "$search"
) AS t1
ON t1.customerIDi = cards.CustomerID
http://sqlfiddle.com/#! 9 / 82ad8 / 23/0
Я вложил выбор в найдите владельца карты, а затем получите все связанные карты.