Вы можете просто использовать FIND_IN_SET
здесь:
SELECT *
FROM users
WHERE FIND_IN_SET('$username', friend_array) > 0
LIMIT 0,8;
Вы должны использовать утверждение, как вы пытались сделать:
sql = "SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) > 0 LIMIT 0,8";
$query = mysqli_prepare($con, $sql);
$query->bind_param('s', $username);
$query->execute();
Но еще лучше было бы нехранить данные CSV в ваших таблицах.Вместо того, чтобы хранить список имен пользователей / идентификаторов пользователей, сохраняйте каждое имя пользователя в отдельной записи.Это нормализует ваших данных и облегчит их использование.
Дополнительно:
Если вам действительно нужно напрямую сравнить $username
со списком имен пользователей CSV,затем просто используйте эту конструкцию:
WHERE CONCAT(',', friend_array, ',') LIKE CONCAT('%,', '$username', ',%')
Это охватит все возможные места за один раз.Но опять же, используйте FIND_IN_SET
с утверждением или, что еще лучше, нормализуйте свои данные и не используйте FIND_IN_SET
вообще.