В принципе у меня есть массив «значки», в котором содержится список идентификаторов значков, которые пользователь приобрел (это было сделано в предыдущем запросе), мне нужно запустить другой запрос для каждого идентификатора, чтобы выбрать имя, описание и т. д. значка.Выполнение одного и того же запроса mysqli с разными параметрами каждый раз
$level = array("#FFFFFF", "#76EE00", "#00FFFF", "#00FFFF", "#FF77FF");
for ($i = 0; $i < count($badge); $i++) {
if($stmt = $mysqli->prepare("SELECT badges.name, badges.description, badges.value FROM badges INNER JOIN user_badges ON user_badges.id_badge = ? LIMIT 1")){
$stmt->bind_param('s', $badge[$i]);
$stmt->execute();
echo $badge[$i] . "test";
$stmt->store_result();
$stmt->bind_result($name,$description,$value);
//echo $name;
$stmt->fetch();
echo '<div class="badge"><span class="bold" style="color:' . $level[$value] . '">' . $name . '</span></div>';
$stmt->close();
}
}
В этом случае массив жетонов содержит значения 1 и 2, как:
array(2) { [0]=> int(1) [1]=> int(2) }
И это происходит через петлю для штрафа для каждого значения. Однако кажется, что запрос выполняется дважды для значения 1, а не для значений 1 и 2. * Если это имеет смысл Таким образом, я получаю два выхода значка с идентификатором 1, а не 1 и 2.
Я знаю, что могу использовать foreach и т. Д., Но это не проблема. Мне было интересно, может ли кто-нибудь научить меня тому, почему это происходит? Я чувствую, что это связано с привязкой результатов, но я не знаю почему.
выглядит ваш SQL неправильно. Бесполезный JOIN может привести к вашим результатам. Вы попробовали этот запрос в консоли? –
Ничего себе, извините, я действительно даже не потрудился посмотреть на запрос. Вы правы, я изменил его на: «SELECT badges.name, badges.description, badges.value FROM badges INNER JOIN user_badges ON user_badges.id_badge = badges.id WHERE (badges.id =?) LIMIT 1" и он работает сейчас хорошо. Спасибо! – iyop45