@rinaz22

Как получить несколько записей с БД?

Всем привет! Делаю корзину на сайте. Пользователь может добавить неограниченное кол-во товаров. При оплате нужно получить данные этих товаров с БД по id.
Товаров корзине может быть как 1, так и несколько и нужно получить данные всех товаров.
Как лучше это сделать, с помощью цикла или как?
Я пока сделал так, но сомневаюсь что так правильно:
$query = mysqli_query($db, "SELECT `title`, `price` FROM `tovar` WHERE `id` = '2' or `id` = '4' or `id` = '7'");
while($row = mysqli_fetch_assoc($query)) {
	echo $row['id']."<br>";
}
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я в общем согласен с предыущим оратором, что PDO будет попроще в работе, тем более что твои познания в mysqli не сильно отличаются от полного незнания, и в этом смысле разница будет невелика.

Но чтобы в прыжке не переобуваться, вот тебе код для mysqli
в массиве $array лежат твои id товаров
$array = [1,2,3];
$in  = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
$stmt  = $mysqli->prepare($sql);
$types = str_repeat('s', count($array));
$stmt->bind_param($types, ...$array);
$Stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$data = $result->fetch_all(MYSQLI_ASSOC);

Теперь в массиве $data лежат твои товары.

Для сравнения, код для пдо будет попроще
Плюс, в качестве бонуса, пдо вернет массив, проиндексированный не числами по порядку, а ид товара. Тебе же надо будет как-то совмещать данные из бд с товарами, чтобы перемножить цену на количество.
$array = [1,2,3];
$in  = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
$stmt  = $pdo->prepare($sql);
$stmt->execute($array);
$data = $stmt->fetchAll(PDO::FETCH_UNIQUE);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы