每次使用不同的参数运行相同的 mysqli 查询
Posted
技术标签:
【中文标题】每次使用不同的参数运行相同的 mysqli 查询【英文标题】:Running the same mysqli query with different parameters each time 【发布时间】:2013-05-26 15:21:55 【问题描述】:基本上我有一个数组“$badges”,其中包含用户已获取的徽章 ID 列表(这已在之前的查询中进行过),我需要为每个 ID 运行另一个查询以选择名称、描述徽章等。
$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)
对于每个值,它都通过了 for 循环。但是,查询似乎对值 1 执行了两次,而不是对值 1 和 2。*如果这有任何意义 所以我收到了两个 id 为 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”并且它正在工作现在好了。谢谢! 【参考方案1】:除了格式错误的 SQL 之外,您运行准备好的语句的方法也非常错误。 您必须将准备工作移到外面,然后在循环中只运行绑定和执行。 这就是准备语句的重点
$stmt = $mysqli->prepare("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");
for ($i = 0; $i < count($badge); $i++)
$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>';
另外,这里JOIN好像没用,只能查询badges
table
【讨论】:
我确定你是对的,但这样做会导致我出现很多错误吗?警告:mysqli_stmt::store_result(): 无法在 etc etc 中获取 mysqli_stmt 啊,忘记从循环中删除关闭以上是关于每次使用不同的参数运行相同的 mysqli 查询的主要内容,如果未能解决你的问题,请参考以下文章